我有一个多标签框架,我必须在不同选项卡下设置某些按钮的快捷方式,但它们必须使用相同的密钥。 例如:
在tab1下,我有一个“Do that”按钮,它应对F1键作出反应, 但如果我要切换到tab2,我应该有一个“执行此操作”按钮 这也应该对F1按钮作出反应,但tab1上的动作不应该 被解雇了。
我尝试将keylistener
添加到标签/键/面板但是,如果我按F1键,则是第一个被触发的操作。
但我认为原因是我使用了一个控制关键事件的开关,例如case KeyEvent.VK_F1:mybutton1.doclick();
那么如何在不同的标签下分开动作?有没有办法获得焦点选项卡例如或其他什么?
问候。
编辑:Swing操作的一些代码:
private class SwingAction extends AbstractAction {
public SwingAction() {
putValue(NAME, "mybutton");
putValue(SHORT_DESCRIPTION, "Some short description");
}
public void actionPerformed(ActionEvent e) {
mybutton.getInputMap().put(KeyStroke.getKeyStroke("F1"),"pressed");
mybutton.getActionMap().put("pressed",mybutton.doClick());
}
}
我得到:
在ActionMap类型中放置(Object,Action)方法不适用 对于参数(String,void) 错误,(对不起这里的Java / Swing新手)
答案 0 :(得分:4)
使用
JButton,您可以为实施Swing Action
的任何JCOmponents设置相同的JBUtton#setAction()
KeyBindings(对于F1
)输出到Swing Action
,在Action
内,您必须致电JButton#doClick()
永远不要将KeyListener用于Swing JComponents
答案 1 :(得分:3)
将KeyStroke
绑定到按钮的doClick()
具有视觉和听觉反馈的优势;但是,正如您所观察到的,doClick()
不是Action
。而是创建一个Action
来调用给定按钮的doClick()
方法,并将其绑定到所需的KeyStroke
,如此example所示。