有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

简短问题

我想知道是否有关于为所有组件编写一个listener instance或为每个组件编写一个实例的良好实践建议

扩展问题

我正在开发一个JavaSwing应用程序

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

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

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

我找不到关于这方面的任何好的实践建议,除了this comment,它没有指向任何参考


共 (4) 个答案

  1. # 1 楼答案

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

    另一种选择是基于事件源的不断增长且难以维护的if-then-else梯形图

    附录:啊,我误解了你的问题@安德鲁的comment是关于;您的问题询问了实例。对于前者,单个听者倾向于向aknown anti-pattern进化;引用的example的早期版本说明了这个问题。对于后者,仅根据需要使用尽可能多的实例;我通常在一次通过分析器的旅行中捕捉到最严重的违规行为

  2. # 2 楼答案

    我认为最好的解决方案是使您的代码尽可能干净

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

  3. # 3 楼答案

    你的想法真的很有趣

    如果它的摆动。。。。那么它已经基于MVC架构

    Model-业务逻辑和数据

    View-输出的表示

    Controller-对其执行操作

    现在我认为最好有Business Logic with its data together,这样我们就可以很容易地将逻辑与其对应的数据关联起来

    对于公共事件源,始终可以有一个公共侦听器,如JButton

    您可以有4个JButton,它们执行不同的工作,现在您可以有一个带有switch语句的ActionListener。。。。。很容易处理

  4. # 4 楼答案

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

    如果创建实例使它变得更简单,那么继续做吧,但因为行为保持不变;我相信单例应该有效