4

我的意思是,无论焦点在哪里,在网络浏览器中按“F5”都会刷新网页。我如何使用 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

另一种选择是为您的应用程序使用菜单栏。然后刷新只是成为菜单上的一个菜单项,您可以将 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 回答