15

我注意到人们建议不要混合 Swing 和 AWT Components,但是我们经常看到:

import javax.swing.AbstractButton;
import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.JFrame;
import javax.swing.ImageIcon;
 //AWT imports though only for listeners
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;

那么为什么包括 Java 在内的许多人(因为我从他们的教程中得到了这个仍然使用 AWT 导入,尽管我认为它主要用于Listeners.

你如何为, , presss/slections 等添加原生Swing Listeners/Libraries ?KeyButtonJComboBox

或者我会用firePropertyChangeListeners()吗?(尽管这与 Java Beans 有关)

一段时间以来我一直很困惑,我的大多数应用程序都有 Swing 和 AWT 据说很糟糕?

4

3 回答 3

11

Swing 建立在 AWT 之上,具有不同的创建和绘制 UI 组件的理念。混合来自两个框架的 UI 组件可能会导致意外结果,因此不鼓励使用(正如 kleopatra 所说,这已得到修复)。然而,Swing 仍然使用 AWT 事件队列范例,包括侦听器 - 它不会用 Swing 原生的侦听器替换它们,因为没有理由这样做。

在您的应用程序中同时使用 Swing 和 AWT 是常见的做法,您被警告不要同时使用 Swing 和 AWT UI 组件。

于 2012-08-20T15:10:55.193 回答
10

Swing 与 AWT 共享相当多的类,并使用一些相同的实现 - 请注意 javax.swing.JComponent(基本 Swing 组件类)实际上继承自 java.awt.Component(基本 AWT 容器类)

如果你小心的话,实际上混合 Swing 和 AWT 并不是什么大问题。主要的陷阱是:

  • 如果您混合 AWT 和 Swing UI 组件,您可能会获得非常不同的外观和感觉
  • Swing 组件是“轻量级的”(由 Java 呈现),而 AWT 组件是“重量级”的(作为主机平台中的组件实现)——这意味着如果将 AWT 组件放在 Swing 组件中会遇到问题(反之亦然)
于 2012-08-20T15:15:58.557 回答
1

也许将来有人会看到这个并且仍然觉得它很有用。有一个AWT 组件列表以及它们的 Swing 替代品是什么。

于 2014-11-19T14:05:20.840 回答