这个想法很简单:我有JTree
由TreeNode
的不同子类组成。
问题:如何让用户只选择XyNode
类型的节点?
我想过只添加TreeSelectionListener
并取消选择用户可能选择的任何“错误”节点,但它似乎很快&脏。
我想到了写自己的TreeSelectionModel
,但界面似乎不适合这项工作。
任何人都有这方面的经验或解决方案吗?
答案 0 :(得分:2)
想出来。 TreeSelectionModel
是正确的选择。
当用户点击时,用户界面调用setSelectedPaths(TreePath[] paths)
中的addSelectedPaths(TreePath[] paths)
和TreeSelectionModel
,然后将这些方法的返回值设置为选择。
只需扩展DefaultTreeSelectionModel
并覆盖两个方法,例如:
public TreePath[] setSelected(TreePath[] paths) {
super(getValidPaths(paths));
}
public TreePath[] getValidPaths(TreePath[] paths) ...
您可以添加任何类型的支票,并且可以独特地处理添加(Ctrl-Click)和设置(正常点击)。
答案 1 :(得分:0)
我之前看过这个建议:
“不确定这是最佳做法,但也许你可以在你要验证的组件上放置一个FocusListener ...在调用事件时调用你的验证然后如果你不想要那么消耗那么事件焦点被移动,因为验证失败了?“