Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/396.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java swing—ActionListener应该去哪里?_Java_Swing_User Interface_Actionlistener_Code Organization - Fatal编程技术网

Java swing—ActionListener应该去哪里?

Java swing—ActionListener应该去哪里?,java,swing,user-interface,actionlistener,code-organization,Java,Swing,User Interface,Actionlistener,Code Organization,按照惯例,用户界面的ActionListener应该去哪里?我有几个选择,但没有一个是完全正确的 速记: GUI—包含所有JPanels/displayable对象的主类 Logic—处理应用程序逻辑的主类 我可以在GUI中在线声明一个新的ActionListener,存储它,然后将其指针传递到需要它的地方 我可以让GUI本身实现ActionListener,并将对自身的引用传递到需要它的地方 我可以在主逻辑中在线声明一个新的ActionListener(这很有意义,因为按钮所做的操作是G

按照惯例,用户界面的ActionListener应该去哪里?我有几个选择,但没有一个是完全正确的

速记:

  • GUI—包含所有JPanels/displayable对象的主类
  • Logic—处理应用程序逻辑的主类

  • 我可以在GUI中在线声明一个新的ActionListener,存储它,然后将其指针传递到需要它的地方
  • 我可以让GUI本身实现ActionListener,并将对自身的引用传递到需要它的地方
  • 我可以在主逻辑中在线声明一个新的ActionListener(这很有意义,因为按钮所做的操作是GUI中不应该出现的逻辑),然后将其传递给GUI,GUI将把它传递到需要的地方
  • 我可以在一个全新的文件GUIListener.java中编写逻辑,并在需要的地方声明GUIListener/传递它
  • 还有其他方法,我肯定有很多

  • 这基本上提出了关注点分离的问题。
    在我看来,应该将GUI、控制器和模型(bean)对象保存在单独的文件中。控制器,促进与应用程序相关的所有处理

    不要这样做(3),将UI和交互内容排除在业务逻辑之外。假设您希望以后有一个与当前swing应用程序在相同数据上运行的Web应用程序-如果您的逻辑代码中充斥着ActionListener,您不能只是重复使用它。很多都取决于您想要实现的目标,但是您可能想看一下。看看
    javax.swing.text.DefaultEditorKit
    &
    javax.swing.text.StyledEditorKit
    以了解可重用的
    操作
    类的示例。