以下是一小段代码,用来改变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(); } }}java7ActionListener
(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(); } }}java7ActionListener
而不是谢在repaint()方法中。。