Swing和AWT混音很糟糕,但仍然完成,为什么?

我注意到人们建议不要混合使用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导入,尽管我看到它主要用于Listener

如何为KeyButtonJComboBox press / slections等东西添加原生的 Swing Listener s / Libraries?

或者我会使用firePropertyChangeListeners() ? (虽然这与Java Bean有关)

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

Swing与AWT共享了不少类,并使用了一些相同的实现 – 请注意,javax.swing.JComponent(基本Swing组件类)实际上是从java.awt.Component(基本AWT容器类)inheritance的。

如果你小心的话,混合Swing和AWT实际上并没有那么大的问题。 主要缺陷是:

  • 如果混合使用AWT和Swing UI组件,您可能会遇到非常不同的外观
  • Swing组件是“轻量级的”(由Java呈现),而AWT组件是“重量级”(在主机平台中实现为组件) – 这意味着如果将AWT组件放在Swing组件中(反之亦然),则会出现问题

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

对你的应用程序使用Swing和AWT是常见的做法,你被警告的是同时使用Swing和AWT UI组件。

也许有人会在未来看到这一点,但仍然觉得它很有用。 有一个 AWT组件列表以及他们的Swing替换件是什么。