按钮会更改颜色,但是当我单击按钮时我需要将其停止

时间:2019-04-11 16:43:24

标签: java swing awt

这是我第一次在这里发布问题。我是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();
            }
        }

    }


2 个答案:

答案 0 :(得分:2)

要从进一步的颜色更改中删除(停止)按钮,请在执行操作后将其从buttons阵列列表中删除。

答案 1 :(得分:0)

我将创建一个由8个布尔值组成的数组来跟踪按钮。并在此处检查按钮是否应更改其颜色:

module.exports = {
  roots: ["<rootDir>/src"],
  transform: {
    "^.+\\.tsx?$": "ts-jest"
  },
  testRegex: "(/__tests__/.*|(\\.|/)(test|spec))\\.tsx?$",
  moduleFileExtensions: ["ts", "tsx", "js", "jsx", "json", "node"],
  "testEnvironment": "node"
};```

您还需要跟踪所有八个值,当它们全部为for (int i = 0; i < 8; ++i){ if(!pressedArr[i]){ button.setBackground(getColor());//change colors } } 时,就跳出true循环