つまり、たとえば、Webブラウザで「F5」を押すと、フォーカスがどこにあるかに関係なく、Webページが更新されます。GUIアプリを使用してJavaでこれを行うにはどうすればよいですか?すべてのコンポーネントに「addKeylistener」を実行できますが、それは適切な方法ではないと確信しています。
質問する
2865 次
4 に答える
7
Swing の入力およびアクション マップ メカニズムを使用できます。
component.getRootPane().getInputMap(JRootPane.WHEN_IN_FOCUSED_WINDOW)
.put(KeyStroke.getKeyStroke(KeyEvent.VK_F5, 0), "refresh");
component.getRootPane().getActionMap().put("refresh", new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
// Code here
}
});
于 2011-01-28T14:00:29.553 に答える
3
この種のタスクに対する最善の解決策は、KeyboardFocusManager
最近この回答で説明したように、リスナを標準に登録することです。
于 2011-01-28T14:12:51.123 に答える
2
もう1つのオプションは、アプリケーションにメニューバーを使用することです。次に、[更新]がメニューのメニュー項目になり、F5をアクセラレータとしてメニュー項目に割り当てることができます。舞台裏では、それはあなたのためにキーバインディングを行います。
これは、自己文書化GUIを使用できるため、優れたアプローチです。ユーザーは、メニューでさまざまなオプションを検索することにより、更新を呼び出すことができます。上級ユーザーは、最終的にはアクセラレータキーを学習し、マウスを使用することさえありません。すべてのGUIデザインと同様に、キーボードまたはマウスのいずれかを使用して関数を呼び出すことができるはずです。
于 2011-01-28T17:06:28.840 に答える
1
AWTEventListener
に を追加できますjava.awt.Toolkit
AWTEventListener listener = new AWTEventListener() {
@Override
public void eventDispatched(AWTEvent ev) {
if (ev instanceof KeyEvent) {
KeyEvent key = (KeyEvent) ev;
if (key.getID() == KeyEvent.KEY_PRESSED && KeyEvent.getKeyText(key.getKeyCode()).equals("F5")) {
System.out.println(ev);
// TODO something meaningfull
key.consume();
}
}
}
};
Toolkit.getDefaultToolkit().addAWTEventListener(listener, AWTEvent.KEY_EVENT_MASK);
于 2011-01-28T16:19:10.297 に答える