Swing ActionListener(Java)的问题

Swing ActionListener(Java)的问题,swing,Swing,我试图在JFrame中的两个按钮上实现ActionListener,但问题是其中一个按钮同时执行这两个功能;但我还没有将其配置为这样做。请查找示例代码:- import javax.swing.*; import java.awt.event.*; import java.awt.*; public class MyChangingCirlce implements ActionListener{ JButton colorButton, labelButton; JLabel myLabel

我试图在JFrame中的两个按钮上实现ActionListener,但问题是其中一个按钮同时执行这两个功能;但我还没有将其配置为这样做。请查找示例代码:-

import javax.swing.*;
import java.awt.event.*;
import java.awt.*;

public class MyChangingCirlce implements ActionListener{
JButton colorButton, labelButton;
JLabel myLabel;
MyDrawPanel mdp;
JFrame frame;
   public static void main(String [] args)
   {
    MyChangingCirlce mcc = new MyChangingCirlce();
    mcc.createFrame();
   } 

  public void createFrame()
  {
frame = new JFrame();
colorButton = new JButton("Changing Colors");
labelButton = new JButton("Change Label");
myLabel = new JLabel("BA");
mdp = new MyDrawPanel();

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);


frame.getContentPane().add(BorderLayout.CENTER, mdp);   
frame.getContentPane().add(BorderLayout.SOUTH,colorButton); 
frame.getContentPane().add(BorderLayout.EAST,labelButton);  
frame.getContentPane().add(BorderLayout.WEST,myLabel);
colorButton.addActionListener(this);
labelButton.addActionListener(this);    
frame.setSize(300,300);
frame.setVisible(true);

  } // end of createFrame Method


public void actionPerformed(ActionEvent e)
{
if(e.getSource()== colorButton)
{
frame.repaint();        
}
else
{
myLabel.setText("AB");
}

}   //end of interface method...
}


}您认为该按钮会触发
if
else
语句,但事实并非如此。如果您要按以下方式调整代码:

  • 添加
    setColor
    changeColor
    或类似于您的
    MyDrawPanel
    类的内容
  • 调整
    MyDrawPanel#paintComponent
    方法以使用固定颜色而不是随机颜色,并且仅通过第一步中创建的方法调整颜色
  • 您的“颜色更改”按钮应使用第一步中创建的方法来调整
    MyDrawPanel
问题是,Swing本身可以调用
paintComponent
。它不仅在调用
repaint
时被调用(这是一件好事,否则为Swing组件编写的所有代码都将被
repaint
调用填充)

旁注:重写
paintComponent
方法时,我建议也调用
super.paintComponent

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class MyDrawPanel extends JPanel{

public void paintComponent(Graphics g)
{
    int red = (int) (Math.random() * 255);
    int green = (int) (Math.random() * 255);
    int blue= (int) (Math.random() * 255);
    Color randomColor = new Color(red,green,blue);
    g.setColor(randomColor);
    g.fillOval(20,70,100,100);
}