Java Swing GUI代码结构

Java Swing GUI代码结构,java,swing,user-interface,Java,Swing,User Interface,我有一个扩展JFrame的类,它构成了我程序的GUI。我想将GUI用于两个主要目的: 我希望用户能够向程序输入值 我希望GUI显示程序创建的值 考虑到我的类有很多GUI元素,源文件已经相当大了,将所有程序代码与GUI代码捆绑在一起似乎不是一个好的做法。我想知道构造代码的最佳方法是什么?我认为存在这样一个问题:需求1创建了从GUI到程序代码的依赖关系,而第二个需求则相反 因此,我想要一个包含所有GUI相关任务的GUI类。然后,我想为我的程序逻辑创建另一个类。然后,我应该能够从GUI调用程序逻辑类中

我有一个扩展JFrame的类,它构成了我程序的GUI。我想将GUI用于两个主要目的:

  • 我希望用户能够向程序输入值
  • 我希望GUI显示程序创建的值
  • 考虑到我的类有很多GUI元素,源文件已经相当大了,将所有程序代码与GUI代码捆绑在一起似乎不是一个好的做法。我想知道构造代码的最佳方法是什么?我认为存在这样一个问题:需求1创建了从GUI到程序代码的依赖关系,而第二个需求则相反


    因此,我想要一个包含所有GUI相关任务的GUI类。然后,我想为我的程序逻辑创建另一个类。然后,我应该能够从GUI调用程序逻辑类中的方法,反之亦然

    听起来您正在寻找教科书中的MVC(模型-视图-控制器)设计模式。我建议您在谷歌上搜索“MVC设计模式”以获取摘要和用例。也就是说,您可能希望将程序逻辑放入一个“Singleton”类(同样,google的“Singleton设计模式”)。正确实现的单例应该可以从代码中的任何其他类访问


    还可以考虑第三个中产阶级,它仅用于数据存储,您将值放入其中进行存储,然后从中获取值进行工作。这将为您的代码创建3个清晰的段:数据(模型)、GUI(视图)和逻辑(控制器)。瞧,您刚刚实现了MVC(模型-视图-控制器)设计模式…

    业务逻辑不应该依赖于GUI逻辑

    让您的GUI从用户那里获取输入。使用这些输入作为方法参数调用业务逻辑方法,并使用方法返回的值在GUI中显示结果。因此,GUI依赖于业务逻辑,但反之则不然

    如果业务逻辑必须回调GUI,那么它应该通过定义良好的GUI不可知回调接口或侦听器进行回调。例如,您可以在某个业务逻辑对象上注册ProgressListener,该对象将回调ProgressListener。GUI将有一个ProgressListener的实现,它实际上会更新一些进度条或文本区域。但是业务逻辑只取决于接口,而不取决于具体的实现。

    我不确定是否有一种“最佳”方式来构造GUI代码。不过,一般来说,您应该遵循MVC。您的程序(模型)不应直接依赖于视图代码。允许它做的是通知控制器模型(或其部分)已更改,并且当前显示模型所述部分的任何视图都应更新


    Swing已经为它的某些类型的组件提供了这个抽象层,大多数类(有点混淆)都以
    Model
    作为后缀。一个简单的例子是。对于程序管理的每个“单元”数据,应该只有一个这样的模型实例,显示此数据的不同视图应该共享此实例。您的业务代码管理此对象,每当此数据块发生更改时,GUI都会通过启动一些事件侦听器来通知使用它。

    这并不是对您的问题的回答,但此概念可以帮助您使用代码逻辑,对Java基本类和基于Swing的GUI也是有效的