簡體   English   中英

如何將JTree中的選擇限制為特定類型的節點?

[英]How can I limit selection in a JTree to a specific type of node?

這個想法很簡單:我有一個JTree它由TreeNode的不同子類組成。

問題:如何允許用戶僅選擇XyNode類型的節點?

我曾想過只添加一個TreeSelectionListener並取消選擇用戶可能選擇的任何“錯誤”節點,但它看起來又快又臟。

我想到了編寫自己的TreeSelectionModel ,但是該接口似乎並不適合該工作。

任何人都有經驗或好的解決方案嗎?

弄清楚了。 TreeSelectionModel是執行此操作的正確位置。

當用戶單擊時,UI會在TreeSelectionModel調用setSelectedPaths(TreePath[] paths)addSelectedPaths(TreePath[] paths) ,然后將這些方法的返回值設置為Selection。

只需擴展DefaultTreeSelectionModel並覆蓋兩個方法即可,例如:

public TreePath[] setSelected(TreePath[] paths) {
    super(getValidPaths(paths));
}

public TreePath[] getValidPaths(TreePath[] paths) ...

您可以添加任何種類的檢查,並且可以區別地處理add(Ctrl-Click)和set(normal Click)。

我以前看過這個建議:

“不確定這是最佳實踐,但是也許您可以在要驗證的組件上放置一個FocusListener……在調用事件時調用驗證,然后如果您不希望將焦點放在事件上,則先消耗事件因為驗證失敗而感動?”

阻止JTree選擇更改發生的最佳方法?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM