我正在开发一个使用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;
}
谢谢!
答案 0 :(得分:0)
只需使用clearSelection()
中的方法JTree
。