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

时间:2012-08-20 15:01:44

标签: java swing awt event-listener import

我注意到人们建议不要混合使用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在内的很多人(因为我从他们的教程here那里得到了它)仍然使用AWT导入,尽管我看到它主要用于Listener

如何为ListenerKeyButton按下/清除等内容添加原生 Swing JComboBox /库?< / p>

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

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

3 个答案:

答案 0 :(得分:9)

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

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

答案 1 :(得分:7)

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

如果你小心的话,混合使用Swing和AWT实际上并不是一个问题。主要缺陷是:

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

答案 2 :(得分:0)

也许有人会在将来看到这一点,但仍然觉得它很有用。 There's a list AWT组件以及他们的Swing替换品。