私はJavaスイングアプリケーションを開発しています。CTRL +と言うキーボードショートカットを追加したいH。これは、クリックされたときに jButton1 によって実行されるのと同じアクションを実行する必要があります。
このショートカットは、jButton1 がフォーカスされていない場合でも同じように動作するはずです。
KeyEventDispatcher を試してみましたが、うまくいかないようです。他に方法はありますか?
私はJavaスイングアプリケーションを開発しています。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);
}
}
}
};
Controlキーを修飾子として明示的に使用する代わりに、クロスプラットフォームのユーザーエクスペリエンスを向上させるために、 MASK
returnedbyを使用してください。例です。getMenuShortcutKeyMask()
ImageApp
クラスとを使用して、キーバインディングを調べる必要があります。Oracle から(わずかに変更されていますが、例としてDefaultEditorKitを使用しています):KeyStroke
InputMap
TextComponentDemo
// CTRL + H
KeyStroke key = KeyStroke.getKeyStroke(KeyEvent.VK_H, Event.CTRL_MASK);
// bind the keystroke to an object
inputMap.put(key, DefaultEditorKit.backwardAction);
コンポーネントにフォーカスがない場合でもイベントを発生させたい場合は、キー リスナーよりもこれらを使用します。