1

我想在事件发生时将按钮背景颜色更改 10 次 ?


private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {                                         
    try {
        for (int i = 0; i < 10; ++i) {
            Random r = new Random();
            jButton2.setBackground(new Color(r.nextInt(150), r.nextInt(150), r.nextInt(150)));
            jButton2.repaint();
            Thread.sleep(200);
        }
    } catch (Exception e) {
        System.out.println(e.toString());
    }

}

按钮显示最后一种颜色??


谢谢它工作正常

int x = 0;
Timer timer;
private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {                                         

    timer = new Timer(1000, new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            Random r = new Random();
            jButton2.setBackground(new Color(r.nextInt(150), r.nextInt(150), r.nextInt(150)));
            jButton2.repaint();
            if(x==10){
                timer.stop();
                x=0;
            } else{
                x++;
            }
        }
    });
    timer.start();
}   
4

1 回答 1

3

不要在 Swing 事件线程上调用 Thread.sleep(...),因为这会使整个 Swing GUI 进入睡眠状态。换句话说,您的 GUI 不进行绘画,根本不接受用户输入或交互,并且在事件发生时变得完全无用(也称为Event D ispatch T线程或EDT)。请改用摇摆计时器。请查看Swing Timer 教程以获得更多帮助。

也看看这个问题的一些答案,包括 mKorbel 的。

于 2013-05-09T18:42:53.633 回答