一般而言,在您的键输入集有限的情况下,键绑定是一个更好的选择。
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和绑定,但是知道在触发时,它们将执行相同的代码逻辑,例如…
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)