gpt4 book ai didi

Java KeyListener 与键绑定(bind)

转载 作者:行者123 更新时间:2023-12-01 08:03:17 25 4
gpt4 key购买 nike

我正在尝试编写一个计算器并遇到问题。我已经为所有按钮制作了一个 Action 监听器,现在我想让从键盘输入数据成为可能。我是否需要为 KeyListener 或 Keybinding 完成所有操作,或者是否有其他方法可以在单击按钮后将其发送到 actionlistener 中的说明?哪个更好:按键监听器或按键绑定(bind)

最佳答案

一般来说,如果您的按键输入集有限,则按键绑定(bind)是更好的选择。

KeyListener 存在与可聚焦性相关的问题,并且对于 GUI 中的其他控件,焦点将始终从组件(使用 KeyListener)上移开。

一个简单的解决方案是使用 Actions API 。这允许您定义一个自包含的“操作”,它充当 ActionListener,但也携带可用于配置其他 UI 组件(特别是按钮)的配置信息

例如...

采用一个通用的 NumberAction ,它可以代表任何数字(现在将其限制为 0-9)...

public class NumberAction extends AbstractAction {

private int number;

public NumberAction(int number) {
putValue(NAME, String.valueOf(number));
}

public int getNumber() {
return number;
}

@Override
public void actionPerformed(ActionEvent e) {
int value = getNumber();
// Do something with the number...
}

}

你可以做类似的事情......

// Create the action...
NumberAction number1Action = new NumberAction(1);
// Create the button for number 1...
JButton number1Button = new JButton(number1Action);

InputMap im = getInputMap(WHEN_IN_FOCUSED_WINDOW);
// Create a key mapping for number 1...
im.put(KeyStroke.getKeyStroke(KeyEvent.VK_1, 0), "number1");
im.put(KeyStroke.getKeyStroke(KeyEvent.VK_NUMPAD1, 0), "number1");

ActionMap am = getActionMap();
// Make the input key to the action...
am.put("number1", number1Action);

你就完成了......

您还可以为同一个号码创建任意数量的 NumberAction 实例,这意味着您可以单独配置 UI 和绑定(bind),但要知道,当触发时,它们将执行相同的代码逻辑,例如...

关于Java KeyListener 与键绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23486827/

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