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