2011-10-07 81 views
2

該方法應該合併詞彙表中單個詞條的兩個條目的兩個定義。它創建GlossaryEntryMergeUI類的一個實例(JFrame的擴展),它將引導用戶完成合並過程。用戶點擊一個按鈕提交併關閉窗口。合併方法提取合併的定義並返回組合的詞彙表條目。使用invokeLater或invokeAndWait等待來自另一個GUI的響應

使合併方法等待來自MergeUI的響應的最佳方法是什麼?我嘗試使用InvokeAndWait,但我無法弄清楚如何使它工作。

public GlossaryEntry merge(GlossaryEntry otherEntry){ 
    //First, merge the definitions 
    GlossaryEntryMergeUI thisMerge = new GlossaryEntryMergeUI(this,otherEntry,mergeSignal); 
    thisMerge.setVisible(true); 
    thisMerge.setAlwaysOnTop(true); 

    GlossaryEntry combined = new GlossaryEntry(word); 
    combined.addDefinitions(thisMerge.getDefinitions()); 

    return combined; 
} 

回答

2
  • 考慮尋找CardLayout代替開關兩個或多個窗口之間

  • 如果是有序列化或Observate的話,最好是換碼到invokeAndWait(),用於之間的簡單切換因爲(例如,是否存在BackGroung任務),我建議不要在同一時間使用兩個JFrame,一個JFrame和另一個Window將是JDialod或JWindow。 ometimes是這麼難開關等焦點從一個JFrame的另一個,不用動的JFrame toFront()...

2

這有什麼做用invokeAndWait或invokeLater的,所有的做在一個線程監聽在另一個響應。如果你沒有爲此使用模態對話框,比如JOptionPane(這很容易使用,並且如果需要可以容納一個非常複雜的GUI),可以考慮使用一個監聽器或者被稱爲觀察者設計模式來通知非-GUI組件,當GUI已經被執行時。

另外,GlossaryEntryMergeUI是用戶接觸的唯一GUI嗎?還是從另一個GUI調用,也許是「父」GUI?如果是後者,那麼模式對話框,而不是JFrame是要走的路。按照mKorbel的出色答案編輯:或CardLayout。

+0

有趣的是,現在這個問題讓我感動了 – mKorbel

+0

@mKorbel:請檢查編輯。 1+ –