Ждите и меняйте карты в Java

У меня есть JFrame с cardlayout и две карты. Я хочу, чтобы первая карта отображалась в течение 5 секунд, а затем переключалась на вторую.

Я использовал следующий код:

CardLayout cards=new CardLayout();
panel.setLayout(cards);
panel.add(first,"first");
panel.add(second,"second");
cards.show(panel,"first");
Thread.sleep(5000);
cards.show(panel,"second");

Однако вторая карта показывается напрямую.

1 ответ

Решение

Качели однопоточные. Вы блокируете EDT с призывом к Thread.sleep предотвращение раскраски первой карты. Таймеры Swing были разработаны для взаимодействия с компонентами Swing. Используйте один вместо этого, чтобы вызвать CardLayout#show в таймере ActionListener,

Timer timer = new Timer(5000, new ActionListener() {

    @Override
    public void actionPerformed(ActionEvent e) {
        cards.show(panel,"second");
    }
});
timer.setRepeats(false);
timer.start();

Читайте: параллелизм в Swing

Другие вопросы по тегам