如果您可以这样做,那么 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 周期,是的,它(可以说)更高效(经过仔细考虑,我什至不确定这一点)。但也有一些反对的观点:
- 它使你的代码变得非常丑陋(想象你有数千个测试)
- 它的可重复使用性较差
- 较少面向对象:将对象 KeyStroke 绑定到对象 Action 更加面向对象(请参阅 Actions 的更多内容)here)
- 它更容易出错,因为你的代码可读性较差并且可能变得巨大
- 您的代码是紧密耦合的(您几乎无法将 KeyListener 移动到单独的类中)
- 在您的测试中,您检查哪个按钮触发了该事件,但您还不知道键入了哪个键。您将必须添加更多测试才能找到答案。
因此,对于非常局部的问题,你的方法可能就足够了,但对于更大的视野,它就站不住脚了。
你可以在第三段中找到here,关于此事的一些类似和补充评论。
最后,将 KeyListener 放在 JButton 上有点奇怪。通常,我们注册一个ActionListener。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)