关于Java7 ActionListener 的问题

doy1211 2013-03-14 06:51:58
以下是一小段代码,用来改变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();

}

}

}

...全文
110 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
oZouBianBian 2013-03-18
  • 打赏
  • 举报
回复
看了一下, 你的ColorListener里面就是repaint了一下,要知道,改变窗口大小的时候也是要repaint的
fsilence璐豪 2013-03-18
  • 打赏
  • 举报
回复
你的改变颜色的监听器中 只有一个 repaint方法 你颜色的改变在哪里?? 在repaint()方法中 、、、就如楼上所说 改变窗口打下 系统也会调用repaint方法。。。 所以你应该吧颜色的设置和改变些到 监听器中 而不是谢在repaint()方法中。。。。。。。。
yanxing2012 2013-03-14
  • 打赏
  • 举报
回复
代码贴完,调试下

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧