等待并在java中切换卡片

时间:2013-09-07 10:15:24

标签: java swing cardlayout

我有一张带cardlayout的JFrame和两张牌。 我希望第一张卡片显示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 个答案:

答案 0 :(得分:3)

Swing是单线程的。您通过调用EDT阻止Thread.sleep阻止第一张卡被绘制。 Swing Timers旨在与Swing组件进行交互。而是使用一个来调用计时器ActionListener中的CardLayout#show

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

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

阅读:Concurrency in Swing