java - 将 GUI 组件声明为字段是否有特定原因? ActionListener 也应该是匿名的吗?

标签 java swing jframe actionlistener windowbuilder

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

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

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

我还应该为许多事件或多个处理程序设置一个单独的处理程序。 Window Builder 为每个事件声明匿名处理程序。

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

最佳答案

Is there a specific reason to declare GUI components as fields?

我想说的是,只有当您需要在程序中的某处引用该组件时,您才需要这样做。例如,对于大多数普通的 JLabel,情况通常不是这样,因此最好在使用站点声明和使用这些 JLabel。然而,许多 JButton 和 JTextComponent 将需要在别处使用,并且最好将它们声明为私有(private)类字段。

Also should ActionListener be anonymous?

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

I have been using Window Builder Pro under Eclipse, and examining the code that is being generated...

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

Also many examples show that it is better to create a separate class that extends JFrame. Window Builder just declares JFrame as a field in the class.

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

Also should I have a single handler for many events or multiple handlers. Window Builder declares anonymous handlers for each event.

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

关于java - 将 GUI 组件声明为字段是否有特定原因? ActionListener 也应该是匿名的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12772309/

相关文章:

java - View.onClickListener - 如何获取 View 属性

java - 编写提醒应用程序无法创建新对象

java - 检测两个视频文件的相似性

java - 如果只有一个选项卡存在,有没有办法隐藏 JTabbedPane 的选项卡栏?

java - java中如何退出全屏模式?

java - 用油漆绘制板后绘制东西(JPanel)(java)

java - 如何构建两个 Wicket 应用程序

java - 在Java中将变量返回到第二帧

java - 如何在 JTextArea swing 中实现 autosugesion

java - 在 netbeans 中使用 java swing 登录页面