【发布时间】:2013-09-25 22:32:50
【问题描述】:
我在 SO 上读到混合 awt 和 swing 并不是 Java 中 GUI 编程的好方法。但是,我无法找到任何在使用 swing 时不使用某些 awt 组件的示例。例如,即使使用swing,我遇到的大多数示例都会使用awt进行布局和事件处理。
话虽如此,在使用 Java 的 GUI 编程中不混合 swing 和 awt 意味着什么?这只是意味着不要同时从 swing 和 awt 借用图形小部件,例如按钮、画布,还是完全单独使用 swing 或 awt?还是可以使用 swing 中的图形单元(如按钮、面板)以及 awt 中的事件处理和布局?
大多数情况下,导入至少看起来像这样:
import javax.swing.*;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Color;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
我可能是错的,但由于我是 Java GUI 的新手,所以我没有看到在没有 awt 的情况下使用完全 swing 的示例或以错误的方式查看此示例。
【问题讨论】:
-
Swing 在 AWT 之上构建,因此在编写 Swing GUI 时您将使用 AWT 中的许多类。正如您正确推断的那样,“不要混合 Swing 和 AWT”是指不要混合像
Frame和JFrame这样的 GUI 组件。你会注意到JFrame扩展了Frame。 -
在使用 Swing 时确实很难避免使用 AWT,因为它是建立在 AWT 之上的。有时你甚至不得不同时使用它们,我认为this 就是一个很好的例子。
-
@BoristheSpider:感谢您的评论。这有助于我理清思路。您能否详细说明您的评论并发布作为我接受的答案。
-
@Mast3rPlan:感谢您的链接。
-
通常,您需要的 awt 组件是顶级的,甚至不需要直接使用,因为 JFrame 和 JPopupMenu 存在。布局管理器和事件位于 awt 命名空间中,但它们不是组件。