【问题标题】:Deselect a JTree取消选择 JTree
【发布时间】:2019-01-28 22:53:23
【问题描述】:

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

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

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

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

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

有没有更好的编码方式?

【问题讨论】:

    标签: java swing jtree deselect


    【解决方案1】:

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

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

    【讨论】:

    • for循环添加监听器也会更好。
    • @SergiyMedvynskyy 你是对的。我已经更新了我的答案。
    猜你喜欢
    • 2012-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-17
    • 2017-03-17
    • 1970-01-01
    • 2011-07-01
    相关资源
    最近更新 更多