3

有几个关于如何制作简单 GUI 的示例。我的问题是什么被认为是这样做的正确方法,以及这样做的理由是什么?

我一直在 Eclipse 下使用 Window Builder Pro,并检查正在生成的代码。显然 Window Builder 更喜欢在可视类的 main 方法中将组件(按钮等)声明为局部变量。但是,Window Builder 中有一个按钮可以转换为字段。我遇到的大多数示例似乎更喜欢字段声明。

还有许多例子表明最好创建一个单独的扩展类JFrame。Window Builder 只是JFrame在类中声明为一个字段。

我还应该为许多事件或多个处理程序提供一个处理程序。Window Builder 为每个事件声明匿名处理程序。

我只是想弄清楚首选方法是什么。

4

2 回答 2

8

将 GUI 组件声明为字段是否有特定的原因?

我想说的是,如果您需要在程序中的某处引用该组件,您只需要这样做。例如,大多数普通 JLabel 通常不是这种情况,因此这些可能最好在使用现场声明和使用。然而,许多 JButtons 和 JTextComponents 将需要在其他地方使用,并且最好将它们声明为私有类字段。

ActionListener 也应该是匿名的吗?

只有在有意义的情况下这样做。澄清一下,许多/最快速的一次性 ActionListener 应该是匿名的,但较大的应该是私有内部类,而复杂的较大的应该是单独的独立类。除了感觉和经验,我知道没有简单的测试可以区分这些。

我一直在 Eclipse 下使用 Window Builder Pro,并检查正在生成的代码......

如果您是一名学徒 Swing 编码器,您可能希望将这个工具放在一边,直到您非常熟悉创建 Swing GUI,因为如果您不太熟悉 GUI 构建器,则使用起来可能会很棘手。底层库。否则,如果您是熟练工,当然如果您是专家 Swing 程序员,那么请继续使用它。

还有许多例子表明,最好创建一个扩展 JFrame 的单独类。Window Builder 只是将 JFrame 声明为类中的一个字段。

我认识的大多数 Swing 领域的专家建议,通常最好不要扩展 JFrame,而是在需要时创建和使用 JFrame 对象。这有几个原因,但第一个是避免意外的副作用,例如在没有意识到的情况下覆盖关键方法。当我重写 JComponent 并提供它int getX()int getY()方法时,这发生在我身上。该组件永远不会停留在它应该位于的位置!

我还应该为许多事件或多个处理程序提供一个处理程序。Window Builder 为每个事件声明匿名处理程序。

我认识的大多数人都使用单个处理程序来处理单一类型的操作。例如,如果您正在创建一个计算器,那么创建一个供所有数字按钮共享的处理程序是有意义的,并且可能为不同类型的操作创建多个处理程序:一个处理程序用于基本的数学运算,例如 +、- , *, /, 一个用于内存操作,一个用于更复杂的操作。

于 2012-10-07T19:56:06.617 回答
1

@HovercraftFullOfEels 已经为您的问题提供了很好的答案。我只想在这个基础上加一点:

我还应该为许多事件或多个处理程序提供一个处理程序。Window Builder 为每个事件声明匿名处理程序。

我假设您在问是否应该为多个按钮设置一个处理程序,在ActionEvents. 我的一般经验法则是避免切换 if-else 语句来检测单击了哪个按钮。如果每个按钮做的事情完全不同,那么我通常为每个按钮创建单独的匿名内部类。

于 2012-10-07T20:09:15.653 回答