Кнопки меняют цвет, но мне нужно, чтобы они останавливались при нажатии на них - PullRequest
2 голосов
/ 11 апреля 2019

я впервые задаю вопрос здесь.Я новичок в 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 ]

2 голосов
/ 12 апреля 2019

Чтобы удалить (остановить) кнопку от дальнейших изменений цвета, удалите ее из списка массивов buttons при выполнении действия.

0 голосов
/ 11 апреля 2019

Я бы создал массив из 8 логических значений для отслеживания кнопок.И проверьте здесь, должна ли кнопка менять свой цвет:

for (int i = 0; i < 8; ++i){
  if(!pressedArr[i]){
    button.setBackground(getColor());//change colors
  } 
}

Также вам нужно отследить все восемь значений, и когда все они равны true, просто вырвитесь из цикла while

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...