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

Dav*_*amp 13 java import swing awt event-listener

我注意到人们建议不要混合使用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;
Run Code Online (Sandbox Code Playgroud)

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

你如何添加本地的Swing ListenerS /库的东西一样Key,Button,JComboBox按/ slections等?

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

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

Jac*_*hle 9

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

对于您的应用程序使用Swing和AWT是常见的做法,您所警告的是使用Swing和AWT UI组件.


mik*_*era 7

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

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

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

  • 终于找到了解释混合组件状态的文章(因为jdk6u12),虽然没有读过它;-) http://java.sun.com/developer/technicalArticles/GUI/mixing_components/index.html (4认同)