gui程序中哪个类更适合处理事件?

时间:2014-05-11 04:28:48

标签: java swing event-handling awt

我对这些代码行感到困惑:

public class AL extends Frame implements WindowListener,ActionListener {
Button b;
b = new Button("Click me");
b.addActionListener(this);
...

我理解的是,框架被设置为事件处理程序,以及#34;"按钮。 是否可以设置事件处理程序,它们本身就是gui的一部分而与事件源分开?(我的意思是按钮类可能应该处理它的事件。) 正如我所见,代码中的许多事件都是由jframe处理的。它背后有什么特别的用途吗? 以前谢谢你的时间!

1 个答案:

答案 0 :(得分:3)

你看到这样的代码的原因(我已经看过很多,我承认),是一些程序员,特别是那些编写AWT和/或Swing代码的程序员,往往会把大量的GUI逻辑放到一个单独的类中。原因各不相同,但有几个常见的原因是:

  • 在学习
  • 时,他们在示例中看到了这样的代码
  • 他们不愿意使用匿名类,或者在事件监听器的方法中有太多代码,匿名类似乎不适用
  • 如果直接在父容器的方法中完成所有子组件的事件处理,他们认为理解代码“更容易”
  • 他们害怕在项目中“有太多的课程”(我想找到那些误解的人!)

根据我的经验,很多GUI代码都是这样的。这是一种很好的编程方式吗?绝对没有!

您阅读的任何方法书都会告诉您相同的内容。这些课程打破了良好设计的每一个可能原则。最基本的例子是SRP(http://en.wikipedia.org/wiki/Single_responsibility_principle)。

此外,处理事件作为类方法的GUI类往往不成比例,不幸的是,几千行代码的类是我在不同项目和公司中多次看到的。

不要陷入这个陷阱。保持你的类简短,为每个内部组件设置一个不同的类,除非它是一个初始化非常简单的常规组件(在这种情况下,最好让工厂类进行初始化)。

当处理程序中的代码行很少时,将事件处理保留在匿名类中,当代码超过一行或两行代码时,在单独的类中保持事件处理。

简而言之,GUI代码与其他OO代码没有什么不同,并且应遵循相同的原则和方法。