如何让应用程序中的所有组件响应特定的按键事件?

发布于 2024-10-14 22:12:29 字数 108 浏览 6 评论 0原文

我的意思是,无论焦点在哪里,在网络浏览器中按“F5”都会刷新网页。我如何在 Java 中使用 GUI 应用程序执行此操作?我可以对所有组件执行“addKeylistener”,但我确信这不是正确的方法。

I mean, like, pressing 'F5' in web browser will refresh the web page regardless of where the focus is. How do i do this in Java with GUI app? I can do 'addKeylistener' to all components but I'm sure that's not the proper way.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

你丑哭了我 2024-10-21 22:12:29

您可以使用 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
    }
});

You can use Swing's input and action map mechanism:

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
    }
});
琴流音 2024-10-21 22:12:29

此类任务的最佳解决方案是将侦听器注册到标准 KeyboardFocusManager,就像我最近在这个答案中解释的那样< /a>.

The best solution for that kind of task is to register a listener into standard KeyboardFocusManager, like I recently explained in this answer.

⒈起吃苦の倖褔 2024-10-21 22:12:29

另一种选择是为您的应用程序使用菜单栏。然后“刷新”就成为菜单上的一个菜单项,您可以将 F5 指定为该菜单项的加速键。它会在幕后为您进行按键绑定。

这是一个很好的方法,因为现在您有了一个自我记录的 GUI。用户可以通过搜索菜单中的各种选项来调用刷新。高级用户最终将学会加速键,甚至不会使用鼠标。与所有 GUI 设计一样,您应该能够使用键盘或鼠标调用函数。

Another option is to use a menubar for your application. Then Refresh just becomes a menu item on a menu and you can assign F5 as an accelerator to the menu item. Behind the scenes it will do the key bindings for you.

This is a good approach because now you have a self docummenting GUI. User can invoke refresh by searching the menu for various options. Advanced users will eventually learn the accelerator key and and not even use the mouse. Like all GUI design you should be able to invoke a function using either the keyboard or the mouse.

罗罗贝儿 2024-10-21 22:12:29

您可以将 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);

You may add an AWTEventListener to the 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);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文