Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 按钮会改变颜色,但我需要它们在单击时停止_Java_Swing_Awt - Fatal编程技术网

Java 按钮会改变颜色,但我需要它们在单击时停止

Java 按钮会改变颜色,但我需要它们在单击时停止,java,swing,awt,Java,Swing,Awt,这是我第一次在这里发帖。我是java新手,目前正在学习java课程。这是作业:“修改你的按钮GUI程序,使按钮每秒钟改变一次颜色,除非它们被按下。”…这就是我得到的所有说明。哈哈,什么都不像 所以我现在知道,当点击按钮时,它会变成白色并停止变化。从技术上讲,这符合给出的说明,对吗?我不认为这是他们想要的…加上我只是改变了不透明度,所以它仍然在改变颜色,你只是看不到它,对吗?所以我想知道的是,是否有一种方法可以阻止按钮改变颜色,但保持它已经有的颜色,就像冻结它,而不是把它变成白色?我有一个静态JF

这是我第一次在这里发帖。我是java新手,目前正在学习java课程。这是作业:“修改你的按钮GUI程序,使按钮每秒钟改变一次颜色,除非它们被按下。”…这就是我得到的所有说明。哈哈,什么都不像

所以我现在知道,当点击按钮时,它会变成白色并停止变化。从技术上讲,这符合给出的说明,对吗?我不认为这是他们想要的…加上我只是改变了不透明度,所以它仍然在改变颜色,你只是看不到它,对吗?所以我想知道的是,是否有一种方法可以阻止按钮改变颜色,但保持它已经有的颜色,就像冻结它,而不是把它变成白色?我有一个静态JFrame jf,在main外部按静态布尔值,以及所有正确的导入。我的getColor()函数只返回一个随机颜色。谢谢你的帮助/建议

public static void main(String[] args) { 
        jf = new JFrame("Homework 2");//constructed
        jf.setSize(400,400);//sets window size
        jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//closes program
        jf.setLayout(new GridLayout(2,4));
        ArrayList<JButton> buttons = new ArrayList<JButton>();//array of button
        pressed = true;
        for(int i=1; i <= 8; i++) { //creates 8 buttons
            JButton jb = new JButton();
            jb.setText("Button " + i);
            jb.setOpaque(pressed);
            jb.setBorderPainted(false);
            jb.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    JButton theButton =  (JButton)e.getSource();
                    theButton.setOpaque(!pressed);//makes it white if it has been clicked
                }
            });

            buttons.add(jb);//add the button to the array
            jf.add(jb);//adding to frame
        }
        jf.setVisible(true);//makes the window appear
        while(true) {
            for (JButton button : buttons){
                button.setBackground(getColor());//change colors
            } 
            try {
                Thread.sleep(1000);//unless 
            } catch (InterruptedException e1) {
                e1.printStackTrace();
            }
        }

    }


publicstaticvoidmain(字符串[]args){
jf=新的JFrame(“家庭作业2”);//构建
jf.setSize(400400);//设置窗口大小
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//关闭程序
设置布局(新网格布局(2,4));
ArrayList buttons=新建ArrayList();//按钮数组
按下=真;

对于(int i=1;i我将创建一个包含8个布尔值的数组来跟踪按钮。并在此处检查按钮是否应更改其颜色:

for (int i = 0; i < 8; ++i){
  if(!pressedArr[i]){
    button.setBackground(getColor());//change colors
  } 
}
for(int i=0;i<8;++i){
如果(!按DARR[i]){
setBackground(getColor());//更改颜色
} 
}

此外,您还需要跟踪所有八个值,当所有值均为
true
时,只需在
循环时中断
即可要删除(停止)按钮的进一步颜色更改,请在执行操作时将其从
按钮
数组列表中删除。

1)要更快获得更好的帮助,请添加or。2)不要阻止EDT(事件调度线程)。发生这种情况时,GUI将“冻结”。有关详细信息和修复方法,请参阅。3)删除(停止)按钮的颜色会进一步改变,在执行操作时将其从
按钮列表中删除。@andrewhompson谢谢!!…而且它很容易让我觉得没有想到它有点傻。lolIt总是很高兴得到积极的反馈。另外,请参阅“我没有想到它有点傻”当这种情况发生时,这里也是一样(这是经常发生的)。然后我咯咯地笑了一会儿。这是编程乐趣的一部分