Java JTree键绑定

Java JTree键绑定,java,swing,key-bindings,jtree,Java,Swing,Key Bindings,Jtree,我正试图重新绑定这里写的JTree的F2键。代码如下: System.out.println(DataModelTree.getInputMap(JComponent.WHEN_FOCUSED).get(KeyStroke.getKeyStroke("F2"))); //This gives string "startEditing" DataModelTree.getActionMap().put("startEditing", new javax.swing.AbstractAction

我正试图重新绑定这里写的JTree的F2键。代码如下:


System.out.println(DataModelTree.getInputMap(JComponent.WHEN_FOCUSED).get(KeyStroke.getKeyStroke("F2")));
//This gives string "startEditing"

DataModelTree.getActionMap().put("startEditing", new javax.swing.AbstractAction() {
    public void actionPerformed(java.awt.event.ActionEvent e) {
        System.out.println("F2 pressed");
    }
});
还尝试了此变体:

DataModelTree.getActionMap().put(DataModelTree.getInputMap(JComponent.WHEN_FOCUSED).get(KeyStroke.getKeyStroke("F2")), new javax.swing.AbstractAction() {
    public void actionPerformed(java.awt.event.ActionEvent e) {
         System.out.println("F2 pressed");
    }
});
试图创建单独的非匿名操作类。试图初步删除InputMap和父InputMap中的条目。尝试在其他模式下重新绑定:当\u聚焦\u组件的\u祖先\u和当\u在\u聚焦\u窗口中时。什么都不管用。JTree键绑定保持不变


请帮助。

很抱歉,我们无法回答您的问题,因为我们没有看到您的完整代码。请提供一个复制您不正确行为的,以便我们更容易确定您的错误在哪里

下面是一个小例子,如何为F2键提供树的编辑

import java.awt.event.ActionEvent;

import javax.swing.AbstractAction;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JTree;
import javax.swing.KeyStroke;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;

/**
 * <code>TestTree</code>.
 */
public class TestTree {

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new TestTree()::startUp);
    }

    private void startUp() {
        JTree tree = new JTree();
        tree.setEditable(true);
        tree.getActionMap().put(tree.getInputMap().get(KeyStroke.getKeyStroke("F2")), new AbstractAction() {

            @Override
            public void actionPerformed(ActionEvent e) {
                if (tree.getSelectionPath() != null) {
                    tree.startEditingAtPath(tree.getSelectionPath());
                } else {
                    JOptionPane.showMessageDialog(tree, "Nothing selected");
                }
            }
        });
        JFrame frm = new JFrame("edit tree");
        frm.add(new JScrollPane(tree));
        frm.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        frm.setSize(300, 200);
        frm.setLocationRelativeTo(null);
        frm.setVisible(true);
    }
}