我有一张带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");
然而,第二张卡片是直接显示的。
答案 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();