gpt4 book ai didi

java - 如何定义小键盘的 keyStroke - Enter 键

转载 作者:行者123 更新时间:2023-12-01 14:39:56 26 4
gpt4 key购买 nike

我即将在 swing 应用程序中使用键盘绑定(bind)作为数字键盘输入键,但该键很难捕捉。我见过的所有例子都依赖于类似
key == KeyEvent.VK_KP_LEFT

其中 VK_KP_LEFT 是某个预定义值。其他选项是定义一个按键,如下所示:
KeyStroke.getKeyStroke("控件A");
KeyStroke.getKeyStroke(KeyEvent.VK_A,InputEvent.CTRL_MASK);

但我还没有找到小键盘的“修饰符”。

很容易得到的是普通和numpad-enter之间的区别:所有小键盘键(无论是否切换到数字模式,都是独立的)都被分配
getKeyLocation() == 4
(我从按键/按键释放方法中发现了这一点)

问题是:
如何正确准备小键盘输入键的 keyStroke 以在
中使用它 inputMap.put(KeyStroke keyStroke, Object actionMapKey)
键绑定(bind)方法?

谢谢,
塔里克

最佳答案

如果您正在寻找绑定(bind)Enter键,您可以使用KeyEvent.VK_ENTER,即:

getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0), "someAction");
getActionMap().put("someAction", someAction);

这是一个简短的示例:

import java.awt.event.*;
import javax.swing.*;

public class Test {
public static void main(String[] args) throws Exception {
final JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

JPanel panel = new JPanel();
panel.add(new JLabel("Hit Enter"));

Action someAction = new AbstractAction() {
public void actionPerformed(ActionEvent e) {
JOptionPane.showMessageDialog(frame, "Got it");
}
};

panel.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(
KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0), "someAction");
panel.getActionMap().put("someAction", someAction);

frame.add(panel);

frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
}

编辑:数字键盘上的 VK_ENTER 与主键盘上的 VK_ENTER

经过一些测试,看起来可能无法单独绑定(bind)这些键。为两个键生成相同的KeyStrokeJComponent.processKeyBinding 的实现不会检查 KeyEvent,它只关心 KeyStroke 以便找到所需的操作。

负责分派(dispatch)实际操作的

SwingUtilities.notifyAction 并不委托(delegate) KeyEvent 的所有详细信息(仅按键、修饰符和时间)。因此在 Action 内部无法区分,因为 ActionEvent 中没有详细信息。

如果值得麻烦,您可以重写processKeyBinding并根据需要添加一些逻辑。您还可以使用KeyboardFocusManageraddKeyEventDispatcher()来阻止其中一个按键。

关于java - 如何定义小键盘的 keyStroke - Enter 键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16069502/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com