[英]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……在調用事件時調用驗證,然后如果您不希望將焦點放在事件上,則先消耗事件因為驗證失敗而感動?”
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.