有几个关于如何制作简单GUI的例子。我的问题是什么被认为是这样做的正确方法,这样做的理由是什么?
我一直在Eclipse下使用Window Builder Pro,并检查正在生成的代码。显然,Window Builder更喜欢在视觉类的main方法中将组件(按钮等)声明为局部变量。但是,Window Builder中有一个按钮允许转换为字段。我遇到的大多数例子似乎都更喜欢现场声明。
此外,许多示例表明,最好创建一个扩展JFrame
的单独类。 Window Builder只是将JFrame
声明为类中的一个字段。
我也应该为许多事件或多个处理程序提供单个处理程序。 Window Builder为每个事件声明匿名处理程序。
我只想清楚首选方法是什么。
答案 0 :(得分: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 :(得分:1)
@HovercraftFullOfEels已经为您的问题提供了非常好的答案。我想在这一点上加一点:
我也应该为许多事件或多个处理程序提供单个处理程序。 Window Builder为每个事件声明匿名处理程序。
我假设您在ActionEvents
的情况下询问是否应该为许多按钮设置一个处理程序。我的一般经验法则是避免切换if-else语句来检测单击了哪个按钮。如果每个按钮执行的操作完全不同,那么我通常会为每个按钮创建单独的匿名内部类。