gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 05:23:44 29 4
gpt4 key购买 nike

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

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

我的理解是框架被设置为“它的”按钮的事件处理程序。设置事件处理程序本身是 gui 的一部分而与事件源分开是否可以接受?(我的意思是也许按钮类应该处理它的事件。)正如我所见,代码中的许多事件都是由 jframe 处理的。背后有什么特殊目的吗?之前谢谢你的时间!

最佳答案

您看到此类代码的原因(我承认我也看过很多)是一些程序员,尤其是那些编写 AWT 和/或 Swing 代码的程序员,倾向于将大量的 GUI 逻辑放入一个类中.造成这种情况的原因各不相同,但有几个常见的原因是:

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

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

您阅读的任何方法论书籍都会告诉您相同的信息。这样的类正在打破良好设计的所有可能原则。最基本的示例是 SRP ( http://en.wikipedia.org/wiki/Single_responsibility_principle )。

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

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

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

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

关于java - gui 程序中的哪个类更适合处理事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23588895/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com