Java JTree键绑定
我正试图重新绑定这里写的JTree的F2键。代码如下: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
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);
}
}