取消选择 JTree

Deselect a JTree

我有一个 JPanel 包含 8 个不同的 JTrees,每个 JScrollPane

当我单击一个树节点时,即使我 select 另一棵树,它也总是 selected。所以情况可能是这样的:

我的简单目标是在单击另一棵树时删除select一棵树。

我已经解决了这个问题,但不是以一种高效和优雅的方式,为 each 树这样做:

JScrollPane scrollPane = new JScrollPane(treeONE);
    treeONE.addMouseListener(new MouseAdapter() {
        @Override
        public void mouseClicked(MouseEvent e) {
            treeTWO.clearSelection();
            treeTHREEC.clearSelection();
            treeFOUR.clearSelection();
            treeFIVE.clearSelection();
            treeSIX.clearSelection();
            treeSEVEN.clearSelection();
            treeEIGHT.clearSelection();
        }
    });
    add(scrollPane);

有没有更好的编码方式?

定义一个包含所有树的数组:

JTree[] allTrees = {
    treeONE, treeTWO, treeTHREE, treeFOUR, treeFIVE, treeSIX, treeSEVEN, treeEIGHT
};

然后您可以对所有树使用相同的 MouseListener 实例:

MouseListener mouseListenerForAllTrees = new MouseAdapter() {
    @Override
    public void mouseClicked(MouseEvent e) {
        // deselect all trees except the one which fired the event
        for (JTree tree : allTrees) {
            if (tree != e.getSource())
                tree.clearSelection();
        }
    }
};
for (JTree tree : allTrees) {
    tree.addMouseListener(mouseListenerForAllTrees);
}