Как сделать последовательное изменение цвета на нескольких кнопках с помощью Action Listener в Java? - PullRequest
0 голосов
/ 02 мая 2020

Я хочу сделать очень простое GUI приложение.

Я пытаюсь изменить цвет фона трех кнопок, нажимая четвертую. Тип изменения цвета, который я хочу, является последовательным: когда я нажимаю четвертую кнопку, первая сразу меняет свой цвет, затем происходит период в четыре секунды, а вторая кнопка также меняется, после этого наступает другой период времени и, наконец, последняя кнопка (третья) изменяется.

Большое дело в том, что я могу добиться этого, если я вставлю код изменения цвета в конструктор класса, но не смогу, если я помещу код в кнопка Action Listener Definition. Если я попробую последний способ, изменение цвета будет выполнено по-другому: периоды времени go сначала, а затем вдруг три кнопки меняют свой цвет. Я не хочу этого, поскольку он не последовательный.

Мне нужно, чтобы он работал должным образом (последовательно) при нажатии четвертой кнопки.

Вот мой неработающий код:

public class exalumno extends JFrame {
    private JButton b1;
    private JButton b2;
    private JButton b3;
    private JButton b4;

    public exalumno() {
        setTitle("test");
        setSize(400, 100);
        setLayout(new FlowLayout());
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        b1 = new JButton("a");
        b2 = new JButton("b");
        b3 = new JButton("c");
        b4 = new JButton("changeColors");
        add(b1);
        add(b2);
        add(b3);
        add(b4);
        ActionListener jk = new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent actionEvent) {
                try {
                    b1.setBackground(Color.WHITE);
                    Thread.sleep(4000);
                    b2.setBackground(Color.RED);
                    Thread.sleep(4000);
                    b3.setBackground(Color.ORANGE);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        };
        b4.addActionListener(jk);
        setVisible(true);

    }

    public static void main (String[]args){
        new exalumno();
    }
}

Как вы видите, я реализую периоды с Thread.sleep().

Я был бы очень признателен за вашу помощь. Заранее спасибо.

...