是否有特定的理由将GUI组件声明为字段?ActionListener也应该匿名吗?

Mad*_*gre 3 java swing jframe actionlistener windowbuilder

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

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

此外,许多示例表明创建一个扩展的单独类更好JFrame.Window Builder只是JFrame在类中声明为一个字段.

我是否应该为许多事件或多个处理程序提供单个处理程序.Window Builder为每个事件声明匿名处理程序.

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

Hov*_*els 7

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

我要说你只需要在你的程序中的某个地方引用那个组件就可以了.例如,对于大多数花园种类的JLabel来说通常不是这种情况,因此这些可能是在使用现场最佳声明和使用的.但是,许多JButton和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为每个事件声明匿名处理程序.

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

  • +1好评,我也建议[行动](http://docs.oracle.com/javase/tutorial/uiswing/misc/action.html)作为一般行动处理程序讨论的一部分,这些最适合重新 - 可操作的操作(例如菜单中的"文件打开"以及工具栏上的重复使用).恕我直言 (2认同)