Java 如何将JTree中的选择限制为特定类型的节点?

Java 如何将JTree中的选择限制为特定类型的节点?,java,swing,selection,jtree,Java,Swing,Selection,Jtree,想法很简单:我有一个JTree,由TreeNode的不同子类组成 问题:如何允许用户仅选择类型为XyNode的节点 我曾想过只添加一个TreeSelectionListener,并取消选择用户可能选择的任何“错误”节点,但它似乎很快就完成了 我想到了编写自己的TreeSelectionModel,但界面似乎并不适合这项工作 有人对此有经验或有好的解决方案吗?我以前见过这个建议: “不确定这是最佳做法,但也许您可以在要验证的组件上放置一个FocusListener…在调用事件时调用您的验证,如果由

想法很简单:我有一个
JTree
,由
TreeNode
的不同子类组成

问题:如何允许用户仅选择类型为
XyNode
的节点

我曾想过只添加一个
TreeSelectionListener
,并取消选择用户可能选择的任何“错误”节点,但它似乎很快就完成了

我想到了编写自己的
TreeSelectionModel
,但界面似乎并不适合这项工作


有人对此有经验或有好的解决方案吗?

我以前见过这个建议:

“不确定这是最佳做法,但也许您可以在要验证的组件上放置一个FocusListener…在调用事件时调用您的验证,如果由于验证失败而不希望移动焦点,则使用then事件?”


把它弄明白了<代码>树选择模型是正确的选择

用户单击时,UI在
TreeSelectionModel
中调用
setSelectedPaths(TreePath[]paths)
addSelectedPaths(TreePath[]paths)
,然后将这些方法的返回值设置为选择

只需扩展
DefaultTreeSelectionModel
并覆盖两种方法,例如:

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

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

您可以添加任何类型的检查,并且可以分别处理添加(Ctrl单击)和设置(正常单击)。

谢谢您的回答。我通过尝试找到了链接中的另一个答案(投票数更多)。