我正在开发一个Java Swing应用程序。 我想添加一个快捷键CTRL说+ H。 当点击这应该履行的jButton1进行同样的动作。
此快捷方式应该表现在即使不集中的jButton1以同样的方式。
我试着用的KeyEventDispatcher,但它似乎并没有对我的工作。 有没有其他办法?
我正在开发一个Java Swing应用程序。 我想添加一个快捷键CTRL说+ H。 当点击这应该履行的jButton1进行同样的动作。
此快捷方式应该表现在即使不集中的jButton1以同样的方式。
我试着用的KeyEventDispatcher,但它似乎并没有对我的工作。 有没有其他办法?
好了-首先,我不认为有一种方法来设置的Java Swing(请参阅此应用程序的快捷方式广泛问题 )。 但是,对于一个组件是可能的。
你必须使用一个创建Action
为KeyStroke
。 但是对于Windows,我发现这个库非常有帮助 。
{
KeyStroke cancelKeyStroke = KeyStroke
.getKeyStroke((char) KeyEvent.VK_ESCAPE);
Keymap map = JTextComponent.getKeymap(JTextComponent.DEFAULT_KEYMAP);
map.addActionForKeyStroke(cancelKeyStroke, cancelKeyAction);
}
private static Action cancelKeyAction = new AbstractAction() {
public void actionPerformed(ActionEvent ae) {
Component comp = (Component) ae.getSource();
Window window = SwingUtilities.windowForComponent(comp);
if (window instanceof Dialog) {
window.dispose();
} else if (comp instanceof JTextComponent
&& !(comp instanceof JFormattedTextField)) {
JTextComponent tc = (JTextComponent) comp;
int end = tc.getSelectionEnd();
if (tc.getSelectionStart() != end) {
tc.setCaretPosition(end);
}
}
}
};
我想回答你的问题可以在这里找到http://docs.oracle.com/javase/6/docs/api/javax/swing/JComponent.html#registerKeyboardAction%28java.awt.event.ActionListener,%20java。 lang.String,%20javax.swing.KeyStroke,%20int 29%
你应该看看键绑定 ,使用类KeyStroke
和InputMap
。 从Oracle的TextComponentDemo
(略作修改,但仍然使用DefaultEditorKit为例):
// CTRL + H
KeyStroke key = KeyStroke.getKeyStroke(KeyEvent.VK_H, Event.CTRL_MASK);
// bind the keystroke to an object
inputMap.put(key, DefaultEditorKit.backwardAction);
使用他们在关键监听器当您希望触发的事件,即使组件没有焦点:
主要听众也是困难的,如果键绑定功能处于活动状态时,该组件没有焦点。
而是明确使用控制键作为改性剂,使用MASK
由归国getMenuShortcutKeyMask()
为了更好的跨平台的用户体验。 ImageApp
是一个例子 。