这个想法很简单:我有一个JTree
,由TreeNode
的不同子类组成。
问题:如何允许用户仅选择XyNode
类型的节点?
我曾想过只是添加一个TreeSelectionListener
并取消选择用户可能选择的任何“错误”节点,但它看起来又快又脏。
我想写自己的TreeSelectionModel
,但是界面似乎并不适合该工作。
任何人都有经验或好的解决方案吗?
最佳答案
弄清楚了。 TreeSelectionModel
是正确的选择。
用户单击时,UI会在setSelectedPaths(TreePath[] paths)
中调用addSelectedPaths(TreePath[] paths)
和TreeSelectionModel
,然后将这些方法的返回值设置为Selection。
只需扩展DefaultTreeSelectionModel
并覆盖两个方法,例如这样:
public TreePath[] setSelected(TreePath[] paths) {
super(getValidPaths(paths));
}
public TreePath[] getValidPaths(TreePath[] paths) ...
您可以添加任何种类的检查,并且可以区别地处理add(Ctrl-Click)和set(normal Click)。