关于Java7 ActionListener 的问题
以下是一小段代码,用来改变label上圆圈的颜色,理论上应该是点击“Change Color”以后颜色才会改变,实际上如果用鼠标改变窗口大小,颜色也会变(MyDrawPanel类的代码没有粘在这里,不用理会...)
求原因...
谢谢
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
public class TwoButtons {
JFrame frame;
JLabel label;
/**
* @param args
*/
public static void main(String[] args) {
TwoButtons gui = new TwoButtons();
gui.go();
}
public void go() {
this.frame = new JFrame();
this.frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JButton labelButton = new JButton("Change Lable");
labelButton.addActionListener(new LabelListener());
JButton colorButton = new JButton("Change Cirle");
colorButton.addActionListener(new ColorListener());
this.label = new JLabel("I'm a label");
this.label.setSize(50, 50);
MyDrawPanel drawPanel = new MyDrawPanel();
this.frame.getContentPane().add(BorderLayout.SOUTH, colorButton);
this.frame.getContentPane().add(BorderLayout.CENTER, drawPanel);
this.frame.getContentPane().add(BorderLayout.EAST, labelButton);
this.frame.getContentPane().add(BorderLayout.WEST, this.label);
this.frame.setSize(500, 500);
this.frame.setVisible(true);
}
class LabelListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent arg0) {
String[] strArray = new String[5];
strArray[0] = "label1";
strArray[1] = "label2";
strArray[2] = "label3";
strArray[3] = "label4";
strArray[4] = "label5";
int random = (int) (Math.random() * 4);
TwoButtons.this.label.setText(strArray[random]);
}
}
class ColorListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
TwoButtons.this.frame.repaint();
}
}
}
java7 ActionListener --------------------编程问答-------------------- 代码贴完,调试下 --------------------编程问答-------------------- 看了一下, 你的ColorListener里面就是repaint了一下,要知道,改变窗口大小的时候也是要repaint的 --------------------编程问答-------------------- 你的改变颜色的易做图中 只有一个 repaint方法 你颜色的改变在哪里?? 在repaint()方法中 、、、就如楼上所说 改变窗口打下 系统也会调用repaint方法。。。 所以你应该吧颜色的设置和改变些到 易做图中
而不是谢在repaint()方法中。。。。。。。。
补充:Java , Java SE