0

我有一个JPanel包含 8 个不同JTreesJScrollPane.

当我点击一个树节点时,即使我选择了不同的树,它也总是被选中。所以情况可能如下:

在此处输入图像描述

我的简单目标是在单击另一棵树时取消选择一棵树。

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

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);

有没有更好的编码方法?

4

1 回答 1

3

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

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);
}
于 2018-08-22T16:47:55.450 回答