0

我有一个带有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");

然而,第二张卡直接显示。

4

1 回答 1

3

Swing 是单线程的。您正在阻止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 中的并发性

于 2013-09-07T10:19:00.807 回答