所有组件的一个侦听器实例或每个组件的实例

时间:2012-09-03 17:40:46

标签: java swing

简短问题

我想知道是否有任何关于为所有组件编写一个监听器实例或每个组件的实例的良好实践建议。

扩展问题

我正在开发一个java swing应用程序。

在相同的形式中,我可以使用相同的侦听器类的十几个组件(它们之间没有关系)。我在自己的课堂上写下每个听众。

侦听器用于对组件上引入的数据进行一些验证。

我应该为每个组件创建一个侦听器类的实例,还是应该为所有组件使用相同的侦听器实例。

除了this comment之外,我找不到任何关于此的良好做法建议,但没有提及任何参考。

4 个答案:

答案 0 :(得分:3)

对于ActionListener的特定情况,使用Action封装所需的功能。整个Swing中这个类的宽use表明它的价值。这个简单的example说明了一些内置的文本组件操作;这个更精细的example显示了如何在菜单和工具栏之间共享操作。

替代方案是基于事件源的不断增长且难以维护的if-then-else阶梯。

附录:啊,我误解了你的问题。 @ Andrew的comment是关于;您的问题询问实例。对于前者,单个倾听者倾向于向known anti-pattern演变;引用的example的早期版本说明了这个问题。对于后者,只使用所需数量的实例;我通常会通过探查器捕获最严重的违规行为。

答案 1 :(得分:2)

我认为最好的解决方案是使您的代码尽可能最清晰的解决方案。

基本上,如果只有一个实例不会使代码过于复杂,那么您只需创建一个实例并在组件之间共享它。否则,您可以拥有多个实例。

答案 2 :(得分:1)

您应该选择一个能够保持代码可读性和可维护性的代码。

如果创建实例使其变得更简单,那么继续执行它,但因为行为保持不变;我相信单个实例应该可以工作。

答案 3 :(得分:1)

你的想法非常有趣........

如果它的Swing移动....那么它已经基于MVC架构......

Model - 业务逻辑和数据

View - 输出表示

Controller - 已完成操作。

现在我认为拥有Business Logic with its data together也更好,因此我们可以轻松地将逻辑与其相应的数据相关联。

您可以随时为公共EventSource 设置一个公共监听器,例如JButton ...

你可以拥有4个JButton做不同的作品,现在你可以拥有一个ActionListener switch个陈述.....很容易处理......