2013-03-12 41 views
0

JTree提供SelectionListener和ExpansionListener。 但是,據我所見,當你只展開一個節點(點擊+/-圖標)時,也會觸發一個選擇事件。 1)如果我點擊展開圖標我送1個活動的擴張+ 1個事件如果我點擊一個節點本身我只得到1個事件選擇JTree如何知道節點已擴展但未選中

任何方式上不具有選擇 2)用戶展開節點時觸發選擇事件?

或...我如何才能檢測到擴張(無選擇)?我只想在一個節點真的被選中時執行一個耗時的操作,並且只對擴展做任何事情(除了在GUI中擴展節點除外) 任何想法? 謝謝!

+1

您的最後一段聽起來本身就是一個矛盾:_expension only - 耗時的操作,當真的選擇_請澄清。 – kleopatra 2013-03-13 09:25:50

+0

我在尋找的是一種方式,當用戶展開一個節點(它只會展開樹中的節點)時,我什麼也不做,並讓我只在用戶選擇一個節點時才更新GUI的另一部分那個樹。 – DaveG 2013-03-13 18:04:54

+0

我的應用程序包含幾棵樹。當你點擊樹中的一個節點時,應用程序從數據庫中檢索數據,計算事物,生成圖形等。這需要一些時間。即使文件夾與這樣的信息相關聯。問題是:當您需要擴展10個文件夾節點以訪問另一個需要獲取數據的節點時,我不希望首先從所有10個父文件夾獲取數據(太多計算沒有)。 – DaveG 2013-03-13 18:09:51

回答

1

您可以實現TreeWillExpandListener接口來攔截TreeExpansionEvent,如How to Write a Tree-Will-Expand Listener所示。 TreeExpandEventDemo2就是一個例子。

+0

謝謝,但我不認爲這會阻止發射選擇事件嗎?當我的應用程序中選擇一個節點時,會從DB中檢索許多信息並計算數字。這需要很多時間(超過2秒)。我需要的是我的用戶能夠擴展一個完整的分支(許多節點),而不必更新這5個節點的信息......對我來說最好的辦法是當你通過單擊+圖標展開一個節點(而不是點擊節點本身)不會觸發選擇事件。 – DaveG 2013-03-13 17:58:30

+0

'TreeExpandEventDemo2'爲我工作;這個[示例](http://codereview.stackexchange.com/q/4446/6692)使用'SwingWorker'來回填模型。 – trashgod 2013-03-13 18:52:46

+0

謝謝!這個例子非常有趣,我可能會在未來實現這樣的loazy加載機制。但是現在這並不能回答我更簡單的問題。我的樹被100%加載,所有的孩子已經加載到樹中。我只是試圖區分擴展選擇,而不是通過樹的+圖標打開的進程節點... – DaveG 2013-03-13 21:33:46