我试图写一个计算器,有一个问题。我已经为所有按钮制作了动作监听器,现在我希望可以从键盘输入数据。我是否需要对KeyListener或Keybinding进行全部操作,还是有其他方法可以使单击按钮后将其发送到actionlistener中的说明?还有更好的方法:Keylistener或Keybinding
最佳答案
一般而言,在键输入的集合有限的情况下,键绑定是一个更好的选择。KeyListener
受与可聚焦性相关的问题以及GUI中其他控件的影响,焦点将一直(而不是KeyListener
)始终远离组件。
一个简单的解决方案是使用Action
s 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和绑定,但是知道在触发时,它们将执行相同的代码逻辑,例如...关于java - Java KeyListener与键绑定(bind),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23486827/