KeyBindings 和 KeyListener 之间的区别

2023-11-30

如果您可以这样做,那么 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) {
            ...
        }
        ...
    }
}

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


如果你纯粹计算 CPU 周期,是的,它(可以说)更高效(经过仔细考虑,我什至不确定这一点)。但也有一些反对的观点:

  1. 它使你的代码变得非常丑陋(想象你有数千个测试)
  2. 它的可重复使用性较差
  3. 较少面向对象:将对象 KeyStroke 绑定到对象 Action 更加面向对象(请参阅 Actions 的更多内容)here)
  4. 它更容易出错,因为你的代码可读性较差并且可能变得巨大
  5. 您的代码是紧密耦合的(您几乎无法将 KeyListener 移动到单独的类中)
  6. 在您的测试中,您检查哪个按钮触发了该事件,但您还不知道键入了哪个键。您将必须添加更多测试才能找到答案。

因此,对于非常局部的问题,你的方法可能就足够了,但对于更大的视野,它就站不住脚了。

你可以在第三段中找到here,关于此事的一些类似和补充评论。

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

KeyBindings 和 KeyListener 之间的区别 的相关文章

随机推荐