小编典典
一般而言,在您的键输入集有限的情况下,键绑定是一个更好的选择。
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和绑定,但是知道在触发时,它们将执行相同的代码逻辑,例如…
2020-09-15