我正在用Java构建图形用户界面,我想知道是否有人可以给我一些指导。
具体来说,当在此GUI中单击按钮时,将打开一个大的JDialog(这是扩展JDialog的类),供用户输入一些信息,查看一些信息,单击一些其他内容。
此类包含多个JLabel和其他组件。我的问题是如何创建这样的实例?现在,我在构造函数中拥有了所有东西,使其成为500(!)行构造函数。必须有一个替代方案!
构造函数大约需要300行代码,用于它们的组件放置和设置,另外200行是供侦听器使用的。
想到的另一个问题是,现在我通过调用另一个类来打开此窗口
MyClassExtendsJDIalog temp =新的MyClassExtendsJDIalog();
但我在创建它的类中根本不使用此“ temp”变量,因为“ temp”的构造函数可以做所有事情。似乎我还是在以错误的方式做某事。
感谢您阅读本文。
最佳答案
是的,您做错了什么,但是您的公司(在好(或坏))。
您应该将良好的OO设计规则和清晰的代码应用于您的swing类以及其他任何类。
如果不查看300多行代码(我真的不想看到;-),那么很难说出确切的内容,但这可能是适用的。
我的主要设计规则是“单一职责原则”。根据您的描述(和我的猜测),您正在构造函数中执行以下操作:
* creating (including configuring) components
* placing them in some kind of layout
* registering Listeners
* implementing Listners
这是4个完全不同的问题。
经过一些繁琐的重构后,您可能会得到如下结果:
您可能需要一家工厂来创建组件。
您可能有一个Layouter类,该类接受一个或一组组件(如标签和匹配的文本框)并将它们放置在面板上。
您可能有一个使用组件的类(可能还有模型),并使用侦听器将它们连接在一起。
经过所有这些传递的类将以适当的方式使用它,并在面板上打开所有组件的JDialog。
注意:从概念上讲,没有任何东西可以扩展JDialog。如果要构建新的Swing组件,则仅应扩展Janything。
此示例使用的是Scala,但仍应提供一些启发:http://blog.schauderhaft.de/2011/06/26/clean-code-with-swing-and-scala/