我试图写一个计算器,有一个问题。我已经为所有按钮制作了动作监听器,现在我希望可以从键盘输入数据。我是否需要对KeyListener或Keybinding进行全部操作,还是有其他方法可以使单击按钮后将其发送到actionlistener中的说明?还有更好的方法:Keylistener或Keybinding

最佳答案

一般而言,在键输入的集合有限的情况下,键绑定是一个更好的选择。

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和绑定,但是知道在触发时,它们将执行相同的代码逻辑,例如...

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

10-14 10:15