我有一个应用程序,可以编辑员工的记录,为此,用户可以单击该特定记录并按下编辑按钮,或者用户只需按下我创建的键盘上的快捷键F2。这是我的代码:
btn_EditEmployee.getInputMap(btn_EditEmployee.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke(KeyEvent.VK_F2, 0), "btn_EditEmployee");
btn_EditEmployee.getActionMap().put("btn_EditEmployee", new AbstractAction() {
public void actionPerformed(ActionEvent e) {
//my code for editing an employee
}
});
但我的问题是,如果我点击表上的记录,我创建的F2键就不起作用。有人能告诉我为什么它不起作用吗。提前感谢您的回答。
编辑:当我在JTable上选择一条记录时,我忘记提到F1、F3-F12正在使用上面的代码。唯一的问题是F2。我坚持使用F2作为编辑操作,因为我的F1是我的应用程序上的创建操作。
或者用户只需按下我创建的键盘上的快捷键F2即可。
你有几个问题:
- 您的代码使用F1作为KeyStroke,而不是F2
- 您使用的是按钮的InputMap/ActionMap,而不是表。您应该为表而不是按钮执行KeyBindings
- 您不应该创建两个操作。相反,您可以创建一个可由按钮和表共享的单个Action
所以基本代码是:
Action action = new AbstractAction(...)
{
@Override
public void actionPerformed(ActionEvent e)
{
// add logic here
}
};
JButton button = new JButton( action );
String key = "EditAction"
KeyStroke ks = KeyStroke.getKeyStroke(KeyEvent.VK_R, 0);
InputMap im = table.getInputMap(JTable.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);
im.put(ks, key);
table.getActionMap().put(key, action);