如果可以,KeyBindings有什么意义:

// Imports

public void Test {
    JButton button1;
    JButton button2;
    JButton button3;
    ...

    Test() {
        button1 = new JButton();
        button1.addKeyListener(this);

        button2 = new JButton();
        button2.addKeyListener(this);

        button3 = new JButton();
        button3.addKeyListener(this);

        ...
    }

    public void keyPressed(KeyEvent e) {
    }

    public void keyReleased(KeyEvent e) {
    }

    public void keyTyped(KeyEvent e) {

        Object src = e.getSource();

        if (src == button1) {
            ...
        }

        else if (src == button2) {
            ...
        }

        else if (src == button3) {
            ...
        }
        ...
    }
}

假设我有十个按钮。然后,如果使用KeyBindings,则必须为每个按钮进行单独的键绑定。我展示的例子不是更有效吗?为什么不?

最佳答案

如果您仅计算CPU周期,是的(可以说)效率更高(经过仔细考虑,我什至不确定)。但是有一些反对的地方:

  • 它使您的代码相当丑陋(想象您有成千上万的测试)
  • 它是不太可重用的
  • 较少面向对象:将对象KeyStroke绑定到对象Action上更多的面向对象(参见Actions上的更多信息here)
  • 它更容易出错,因为您的代码可读性较低,并且可能变成巨大的
  • 您的代码紧密耦合(您几乎无法在单独的类中移动KeyListener)
  • 在测试中使用
  • ,您可以检查哪个按钮触发了该事件,但是您尚不知道输入了哪个键。您将不得不添加更多测试来找出答案。

  • 因此,对于局部性很强的问题,您的方法可能就足够了,而对于更大范围的视图,则无法成立。

    您可以在第三段here中找到有关此问题的一些相似和其他注释。

    最后,将KeyListener放在JButton上有点奇怪。通常,我们注册一个ActionListener。

    09-30 20:11