java JTree取消选择已选择的节点

时间:2012-08-05 14:09:52

标签: java swing jtree

我正在开发一个使用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;
 }  

谢谢!

1 个答案:

答案 0 :(得分:0)

只需使用clearSelection()中的方法JTree