Я пытаюсь сделать крошечную программу, которая имеет 3 кнопки, все они белого цвета. Нажатие первой кнопки (с текстом «Go!») Приведет к тому, что вторая кнопка станет оранжевой в течение 3 секунд, а затем, после этого, она снова станет белой, а третья кнопка станет постоянно зеленой.Thread sleep in actionPerformed
Однако в моем следующем коде у меня есть проблема с достижением этого: при нажатии кнопки «Go!» Это заставляет мою программу несколько замораживать в течение 3 секунд, а затем третья кнопка становится зеленой. Не могли бы вы мне помочь?
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Example extends JFrame
{
public Example(String title)
{
super(title);
GridLayout gl = new GridLayout(3,1);
setLayout(gl);
final JButton b1 = new JButton("Go!");
final JButton b2 = new JButton();
final JButton b3 = new JButton();
b1.setBackground(Color.WHITE);
b2.setBackground(Color.WHITE);
b3.setBackground(Color.WHITE);
b1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
b2.setBackground(Color.ORANGE);
try
{
Thread.sleep(3000);
} catch (InterruptedException ie) {}
b2.setBackground(Color.WHITE);
b3.setBackground(Color.GREEN);
}
});
add(b1);
add(b2);
add(b3);
setSize(50,200);
setVisible(true);
}
public static void main(String[] args)
{
Example ex = new Example("My Example");
}
}
'Thread.sleep' блоки EDT! – Maroun
'Thread.sleep (...)' in actionPerformed: Просто скажите *** NO ***. См. Ответ г-на Д. для решения. –
Советы: 1) Не устанавливайте размер контейнеров верхнего уровня. Вместо этого разместите контент и вызовите 'pack()'. 2) Не выдвигайте раму или другие контейнеры верхнего уровня. Вместо этого создайте & используйте экземпляр одного. –