java - java中的等待和切换卡

标签 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");

但是第二张牌是直接显示的。

最佳答案

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();

阅读:Concurrency in Swing

关于java - java中的等待和切换卡,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18672249/

相关文章:

java - 切换到新窗口

java - 在 Netbeans 中使用 CardLayout

java - String.replace() 无法正常工作?我究竟做错了什么?

java - 如何执行从 JFileChooser 到包含文件夹的 JList 的拖放操作

java - 如何使一些 Action 依赖于另一个 Action 的完成?

java - 我无法使用 JTree 监听器更改 cardLayout 中的卡

java - Web 应用程序 - 在哪里放置 hibernate.cfg.xml 文件?

java - 是否有任何库可以从 .class 文件(字节码)中提取类、方法、成员和字段依赖项名称?

java - 安装Android Carbon图书馆的正确方法是什么?

java - JPanel 不会重新验证