[英]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.