【发布时间】:2023-04-03 20:56:01
【问题描述】:
在我的程序中,我有一个 Jbutton(名为“Clear”),用于清除 GUI 中的多个文本字段。我想用 Escape 键替换此按钮,以便按 Escape 键与按该按钮相同。 (我不想在我的程序中使用那个 Jbutton)
【问题讨论】:
在我的程序中,我有一个 Jbutton(名为“Clear”),用于清除 GUI 中的多个文本字段。我想用 Escape 键替换此按钮,以便按 Escape 键与按该按钮相同。 (我不想在我的程序中使用那个 Jbutton)
【问题讨论】:
基本上,您想从使用key bindings 开始。
现在,就我个人而言,我会为您的“清除”按钮附加一个绑定,这样用户就有两个选择……例如……
JButton clear = new JButton("Clear");
InputMap im = clear .getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
ActionMap am = clear .getActionMap();
im.put(KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), "clear");
am.put("clear", new ClearFieldsAction());
【讨论】:
如果要移除按钮并监听孔应用的按键事件,可以创建一个
并在
处注册此 EventQueueToolkit.getDefaultToolkit().getSystemEventQueue().push(INSTANCE_EVENT_QUEUE);
方法
protected void dispatchEvent(AWTEvent e)
将获得您可以处理的 AWTEvent。 喜欢:
@Override
protected void dispatchEvent(AWTEvent e) {
// handle event and/or
super.dispatchEvent(e);
}
你喜欢处理的关键事件
private void handleAWTEvent(AWTEvent event) {
if (event instanceof KeyEvent) {
KeyEvent keyEvent = (KeyEvent)event;
if (keyEvent.getID() != KeyEvent.KEY_PRESSED) {
return;
}
if (keyEvent.isAltDown() ^ keyEvent.isControlDown() && !keyEvent.isShiftDown()) {
...
【讨论】:
试试这个,它对我有用
InputMap im = clear.getRootPane().getInputMap(...
ActionMap am = clear.getRootPane().getActionMap(...
【讨论】: