2009-09-22 96 views
1

我的自定義組件由JPanel中的三個JTree組成。一次只能選擇一個JTree,所以我爲其中的每個人添加了一個TreeSelectionListener,它們在先前選擇的JTree上調用clearSelectionSwing:自定義組件上的聽衆執行順序

我想添加其他TreeSelectionListener s到JTree s確保選擇處理偵聽器總是首先執行。我不想把所有內容都放在一個TreeSelectionListener之內。

我應該怎麼辦?提前致謝!

回答

3

也許你可以通過添加新的偵聽器到現有的偵聽器來進行鏈接,這樣當下一次你的偵聽器被調用時,它將依次將事件轉發給它的偵聽器。

// This is your current listener implementation 
class CustomTreeSelectionListener implements TreeSelectionListener { 

    // listeners to which the even will be forwarded 
    private List<TreeSelectionListener> ownLIsteners; 


    public void addListener(TreeSelectionListener newListener) { 
     ownListeners.add(newListener); 
    } 

    // add also removeListener(.... ) 

    // TreeSelectionListener interface implementation... 
    public void valueChanged(TreeSelectionEvent e) { 
      process(e); // do what you do now 

      // Forward the message. 
      for(TreeSelectionListener listener : ownListeners) { 
       listener.valueChanged(e); 
      } 
    } 

} 
+0

謝謝,這是一個很好的解決方案!我不知道我怎麼沒有得到它之前:) BTW我有一個新的問題:/(http://stackoverflow.com/questions/1466042/swing-how-can-i-ignore-deselection-events) – Giuseppe 2009-09-23 13:37:08

+1

我很高興這很有幫助。也許是因爲有時候我們太集中於一個問題的觀點,我們沒有看到其他的選擇。這經常發生在我身上。有時我們只需要一個不同的觀點。 – OscarRyz 2009-09-23 15:21:44

1

不是一個很好的解決方案,但可以將代碼包裝在SwingUtilities.invokeLater(...)中。這會將代碼添加到EDT的末尾,這意味着它將在其他偵聽器代碼執行後最終執行。