【问题标题】:How to execute several methods one after another in EDT (Swing)如何在EDT(Swing)中依次执行几种方法
【发布时间】:2013-01-15 10:56:50
【问题描述】:

我有 100 个相同的 JPanel,每个都包含带有图标的 JLabel 和带有文本的 JLabel。当某些事件发生时,我想将面板的图标和边框更改 2.5 秒,然后再将它们更改回来。问题是它们第一次被更改在一起,但是当我尝试将它们更改回来时 - 第一个图标被更改,然后在 2 或 3 秒内更改边框。这是 JPanel 执行此操作的方法:

public void showPacketCame() {  
    SwingUtilities.invokeLater(new Runnable() {
        @Override
        public void run() {
            img.setIcon(blue);
            setBorder(BorderFactory.createLineBorder(new Color(54, 208, 243)));

            javax.swing.Timer tim = new javax.swing.Timer(2500, new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {                        
                    img.setIcon(onDark); 
                    setBorder(null);
                }
            });
            tim.setRepeats(false);
            tim.setDelay(2500);
            tim.start();
        }

    });
}

【问题讨论】:

  • 你的两个方法都被立即调用了;您的边框没有响应方法调用setBorder(null),一定有其他原因。
  • 您可能需要单个 Timer 来更改所有面板。
  • 正如 (@trashgod) 提到的,默认情况下一个 Swing.Timer 可以做到这一点
  • 请编辑您的问题以包含一个 sscce 来展示您所描述的问题。
  • @mKorbel 不确定我明白你的意思。删除了调用程序,但将第一个 setIcon 和 setBorder 留在了 Timer 之外 - 这没有帮助。包括计时器中的所有内容并调用 Thread.sleep(2500) 冻结 GUI。

标签: java swing timing event-dispatch-thread


【解决方案1】:

这不是编码动画任务的恰当方式。请使用SwingWorker 为此目的。

【讨论】:

    猜你喜欢
    • 2023-04-05
    • 2013-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多