1

我正在用 Java 构建一个图形用户界面,我想知道是否有人可以给我一些指导。具体来说,当单击此 GUI 中的按钮时,会打开一个大 JDialog(它是一个扩展 JDialog 的类),供用户输入一些信息、查看一些信息、单击一些东西等。

此类中有多个 JLabel 和其他组件。我的问题是如何创建这样一个实例?现在我在构造函数中拥有一切,使它成为一个 500(!) 行的构造函数。必须有替代方案!构造函数包含大约 300 行组件放置和设置的代码,另外还有 200 行用于监听器给予或接受的代码。

另一个想到的问题是,现在我通过调用从另一个班级打开这个窗口

MyClassExtendsJDIalog temp = new MyClassExtendsJDIalog();

但我在创建它的类中根本不使用这个“temp”变量,因为“temp”的构造函数做了一切。似乎我再次以错误的方式做事。

感谢您阅读本文。

4

3 回答 3

5

如果您想拆分代码以使其更具可读性和可管理性,您可以始终将字段分组到 JPanel 的子类中,即 Panel1、Panel2 等,然后只需将它们添加到 JDialog 子类构造函数中。但是在 Swing 中设置 GUI 需要很多行,是的......

至于没有使用的临时变量,我猜你在构造函数中调用了 show() ?通常我不会这样做,而是在创建对话框的代码中调用它,即。

MyDialog dialog = new MyDialog();
dialog.setVisible(true);
于 2012-04-23T21:54:34.747 回答
4

如果没有看到您的代码,就很难为您提供有关如何改进代码和设计的具体提示。

我同意,你的构造函数中大约 500 行直观地感觉像是一个问题。至少,您可能希望将其中的一些工作推迟到创建实例之后。将其转化为一种init()方法(或一系列方法)是一种方法。

您可能还需要考虑设计您的类,使其包含一个 JDialog 而不是扩展一个(有关此主题的讨论,请参阅Composition over继承)我怀疑否则您会将多个类的关注点混为一谈。

最后,您可能想查看Java Swing 教程,了解创建基于 Swing 的用户界面的一般提示和技术。

于 2012-04-23T22:05:27.190 回答
3

是的,你做错了什么,但你在好(或坏)的公司。

您应该将良好的 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/

于 2012-04-23T22:16:05.943 回答