双击JTree节点并获取其名称

时间:2012-10-11 20:23:05

标签: java actionlistener jtree

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

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

4 个答案:

答案 0 :(得分:21)

来自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,因此您需要自己回送到所需的节点类型。

答案 1 :(得分:4)

以下代码适用于我。

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
            }
        }
    });

答案 2 :(得分:2)

MadProgrammer几乎涵盖了所有内容。要获得对象,您可以调用

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

答案 3 :(得分:0)

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

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=");      

    }     
}
相关问题