双击JTree节点并获取其名称

如何双击JTree节点并获取其名称?

如果我调用evt.getSource() ,似乎返回的对象是一个JTree。 我无法将其强制转换为DefaultMutableTreeNode。

来自Java Docs

如果您有兴趣检测双击事件或用户单击某个节点,无论是否选中该节点,我们建议您执行以下操作:

 final JTree tree = ...; MouseListener ml = new MouseAdapter() { public void mousePressed(MouseEvent e) { int selRow = tree.getRowForLocation(e.getX(), e.getY()); TreePath selPath = tree.getPathForLocation(e.getX(), e.getY()); if(selRow != -1) { if(e.getClickCount() == 1) { mySingleClick(selRow, selPath); } else if(e.getClickCount() == 2) { myDoubleClick(selRow, selPath); } } } }; tree.addMouseListener(ml); 

要从TreePath获取节点,您可以遍历路径,或者在您的情况下,使用TreePath#getLastPathComponent

这将返回一个Object ,因此您需要自己回送到所需的节点类型。

MadProgrammer几乎涵盖了所有内容。 获取可以调用的对象

 DefaultMutableTreeNode selectedNode = ((DefaultMutableTreeNode)selPath.getLastPathComponent()). getUserObject(); 

以下代码适用于我。

 tree.addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent e) { if (e.getClickCount() == 2) { DefaultMutableTreeNode node = (DefaultMutableTreeNode) tree.getLastSelectedPathComponent(); if (node == null) return; Object nodeInfo = node.getUserObject(); // Cast nodeInfo to your object and do whatever you want } } }); 

我的例子。 我们可以通过延迟检测双击。

 public class TreeListener extends MouseAdapter{ private JTree _Tree; private boolean singleClick = true; private int doubleClickDelay = 300; private Timer timer; public TreeListener(JTree tree) { this._Tree = tree; ActionListener actionListener = new ActionListener() { public void actionPerformed(ActionEvent e) { timer.stop(); if (singleClick) { singleClickHandler(e); } else { try { doubleClickHandler(e); } catch (ParseException ex) { Logger.getLogger(ex.getMessage()); } } } }; timer = new javax.swing.Timer(doubleClickDelay, actionListener); timer.setRepeats(false); } public void mouseClicked(MouseEvent e) { if (e.getClickCount() == 1) { singleClick = true; timer.start(); } else { singleClick = false; } } private void singleClickHandler(ActionEvent e) { System.out.println("-- single click --"); } private void doubleClickHandler(ActionEvent e) throws ParseException { System.out.println("-- double click -- id="); } }