我的意思是,无论焦点在哪里,在网络浏览器中按“F5”都会刷新网页。我如何使用 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
另一种选择是为您的应用程序使用菜单栏。然后刷新只是成为菜单上的一个菜单项,您可以将 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 回答