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
。
如何为Key
, Button
, JComboBox
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替换件是什么。