4

つまり、たとえば、Webブラウザで「F5」を押すと、フォーカスがどこにあるかに関係なく、Webページが更新されます。GUIアプリを使用してJavaでこれを行うにはどうすればよいですか?すべてのコンポーネントに「addKeylistener」を実行できますが、それは適切な方法ではないと確信しています。

4

4 に答える 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 に答える