簡體   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