繁体   English   中英

如何推送选定的标签更新(java swing)?

[英]How can I push a selected tab update (java swing)?

我正在尝试更新所显示的选项卡,但是它似乎要等到方法结束后再进行更新。 有没有一种方法可以使显示的选项卡立即更新?

这是我遇到此问题的代码示例:

private static void someButtonMethod() 
{
    Button = new JButton("My Button");
    Button(new ActionListener() {
        public void actionPerformed(ActionEvent e) 
        {
            tabs.setSelectedIndex(1);

            // Do some other things (In my case run a program that takes several seconds to run).
            runProgram();
        }
    });
}

这样做的原因是该方法正在Event Dispatch线程中执行,并且任何重新绘制操作也将在此线程中发生 一种“解决方案”是更新选项卡索引,然后安排其余工作在以后的EDT上调用; 这将导致选项卡状态立即更新; 例如

public void actionPerformed(ActionEvent evt) {
  tab.setSelectedIndex(1);

  SwingUtilities.invokeLater(new Runnable() {
    public void run() {
      // Do remaining work.
    }
  });
}

编辑

在下面的评论中,有关如何调用SwingWorker以便调用runProgram方法的示例如下所示:

// Typed using Void because runProgram() has no return value.
new SwingWorker<Void, Void>() {
  protectedVoid doInBackground() {
    runProgram();
    return null; // runProgram() doesn't return anything so return null.
  }

  protected void done() {
    // Called on the EDT when the background computation has completed.
    // Could insert code to update UI here.
  }  
}.execute()

但是,我在这里感觉到一个更大的问题:事实上,您看到更新选项卡的时间显着延迟,这让我认为您正在EDT上进行长时间的计算。 如果是这种情况,则应考虑在后台线程上执行此工作。 看一下SwingWorker类。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM