以下是一小段代码,用来改变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 

解决方案 »

  1.   

    看了一下, 你的ColorListener里面就是repaint了一下,要知道,改变窗口大小的时候也是要repaint的
      

  2.   

    你的改变颜色的监听器中 只有一个 repaint方法 你颜色的改变在哪里?? 在repaint()方法中 、、、就如楼上所说 改变窗口打下 系统也会调用repaint方法 所以你应该吧颜色的设置和改变些到 监听器中 
    而不是谢在repaint()方法中。。