2

我正在开发一个使用 JTree 的 java 应用程序。我想要存档的是,当我单击已选择的节点时,它会被取消选择。

我当前的解决方案是向 jtree 添加一个鼠标侦听器和一个树选择侦听器。但问题是 valueChanged 仅在选择发生变化时才被调用(而不是在您选择同一节点两次时)。为了解决这个问题,我添加了一个布尔值,指示节点是否第一次被单击,然后我在 mouseReleased 函数中处理取消选择。这可行,但现在的问题是,如果节点有子节点并且您想要扩展它,节点会被取消选择并再次重新选择(我不想要)。

我该如何解决这个问题?有没有更好的方法来取消选择已经选择的节点?

编码:

public void initComponents()
{
    elementsTree.addTreeSelectionListener(this);
    elementsTree.addMouseListener(new MouseAdapter() {
      public void mouseReleased(MouseEvent me) {
           TreePath tp = elementsTree.getPathForLocation(me.getX(), me.getY());
           if (tp != null)
           {
             if(!nodeSelected && elementsTree.getSelectionModel().isPathSelected(tp) )
                   {
                        elementsTree.getSelectionModel().removeSelectionPath(tp);
                   }
                }
                nodeSelected = false;
             }
        });
 }

 public void valueChanged(TreeSelectionEvent e)
 {
    nodeSelected = true;
 }  

谢谢!

4

1 回答 1

0

只需使用clearSelection().JTree

于 2015-10-26T21:35:42.617 回答