如何通过单击编辑JTree节点

Jef*_*ler 2 java swing jtree

我有一个JTree,并希望getTreeCellEditorComponent()在我单击一个节点时调用它的方法.根据DefaultTreeCellEditor课程的文档(我扩展),"编辑是在三次鼠标点击,或点击,暂停,点击和1200毫秒的延迟后开始的." 有没有办法覆盖此行为,以便单击可以启动编辑过程?

tra*_*god 5

JTreeAPI建议使用MouseListener,但一个关键的绑定也很方便.此示例调用startEditingAtPath()并绑定到Enter键:

final JTree tree = new JTree();
tree.setEditable(true);
MouseListener ml = new MouseAdapter() {
    @Override
    public void mousePressed(MouseEvent e) {
        int row = tree.getRowForLocation(e.getX(), e.getY());
        TreePath path = tree.getPathForLocation(e.getX(), e.getY());
        if (row != -1) {
            if (e.getClickCount() == 1) {
                tree.startEditingAtPath(path);
            }
        }
    }
};
tree.addMouseListener(ml);
tree.getInputMap().put(
    KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0), "startEditing");
Run Code Online (Sandbox Code Playgroud)

附录:另请参阅有关可用性的答案.

  • > 100k(恭喜,当然:-)或不:这不是问题的答案<ducking>和jtree已经_has_一个绑定(如果我没记错的话,到F2) (2认同)
  • 添加一个kludge无法真正改善它:-)请参阅@ mKorbel对我的回答的评论:引用的链接执行startEditingPath(虽然在selectionListener中),但它是可能的但旁路api旨在让它工作 - 这不是最好的想法,IMO (2认同)