这个想法很简单:我有一个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)。

07-27 17:35