一般来说,如果您的键输入集有限,则键绑定是更好的选择。
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 和绑定,但要知道,当触发时,它们将执行相同的代码逻辑,例如.. .