我的意思是,就像在网络浏览器中按'F5'一样,无论焦点在哪里,都会刷新网页。我如何使用GUI应用程序在Java中执行此操作?我可以对所有组件执行'addKeylistener',但我确信这不是正确的方法。
答案 0 :(得分: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
}
});
答案 1 :(得分:3)
此类任务的最佳解决方案是将听众注册到标准KeyboardFocusManager
,就像我最近在this answer中解释的那样。
答案 2 :(得分:2)
另一个选择是为您的应用程序使用菜单栏。然后刷新只是菜单上的菜单项,您可以将F5指定为菜单项的加速器。在幕后,它将为您进行键绑定。
这是一个很好的方法,因为现在你有了一个自我管理的GUI。用户可以通过在菜单中搜索各种选项来调用刷新。高级用户最终将学习加速键,甚至不使用鼠标。与所有GUI设计一样,您应该能够使用键盘或鼠标调用函数。
答案 3 :(得分:1)
您可以在java.awt.Toolkit
AWTEventListener
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);