Swing and AWT Mixing is bad, but still done, why?

帅比萌擦擦* 提交于 2019-11-29 09:22:02

Swing shares quite a few classes with AWT, and uses some of the same implementation - note that javax.swing.JComponent (the base Swing component class) actually inherits from java.awt.Component (the base AWT container class)

It's actually not that much of a problem to mix Swing and AWT if you are careful. The main pitfalls are:

  • You risk getting a very different look and feel if you mix AWT and Swing UI components
  • Swing components are "lightweight" (rendered by Java) while AWT components are "heavyweight" (implemented as components in the host platform) - this means you will have problems if you put AWT components inside Swing components (the other way round is fine)

Swing is built on top of AWT, with a different philosophy for creating and drawing UI components. Mixing UI components from the two frameworks could lead to unexpected results and was/is thus discouraged (as kleopatra states, this has been fixed). However, Swing still uses the AWT event queue paradigm, including listeners - it does not replace them with listeners native to Swing because there's no reason to.

Using both Swing and AWT for your applications is common practice, what you were warned against is using both Swing and AWT UI components.

Maybe someone will see this in the future and still find it useful. There's a list of AWT components and what their Swing replacements are.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!