我有一个带有 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");
但是第二张牌是直接显示的。
最佳答案
Swing 是单线程的。您通过调用 Thread.sleep
阻止了 EDT
,从而阻止了第一张卡片的绘制。 Swing Timers被设计为与 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();
关于java - java中的等待和切换卡,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18672249/