`
fantasytree
  • 浏览: 26629 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

AWT和Swing组件混用的覆盖问题

    博客分类:
  • java
阅读更多
    最近在给自己的一个搜索下载工具包做一个UI,弄成桌面应用。窗口顶部是标准的swing菜单,下面有几个AWT的label和button组件。当我加了几个菜单项然后运行之后,发现下拉菜单被label挡住了,无论如何设置都不行。后台查阅了相关资料,才知道这是AWT这个重量级组件和swing这个轻量级组件混用的不可调谐的矛盾。

    AWT组件各自对应一个本地组件native peer,就是和操作系统相关,会因为操作系统不同而有不同。Swing中组件除顶级容器类组件如Window、Frame和Applet有自己的native peer外其他都没有对应的native peer,用来模拟这些Swing组件的图形对象资源都来自于它所在的顶层容器。由于二者的Z-order设计不同,所以它们混合使用来排版时会出现各种古怪的覆盖问题。而推荐的做法是尽量只使用其中一种组件,推荐Swing,理由如下:

1,高效的利用资源。AWT需要操作系统的额外开销。
2,维护平台一致性。重量级组件在不同平台具有不同的缺省外观、尺寸、布局、字体以及行为等。这需要编写额外代码维护各个平台程序的一致性。比如 Windows和Linux的缺省字体、大小和样式都不一样,需要显示的设置字体样式和大小等;在Windows很好看的布局有可能在Linux变得乱七八糟;组件间的间隔因为平台的不同而有很多变化。
3,良好的皮肤支持。AWT同SWT一样是不支持皮肤更换机制的。


参考文章:
http://tech.e800.com.cn/articles/2009/83/1249251222247_1.html

SUN官方swing指南:
http://java.sun.com/docs/books/tutorial/uiswing/



分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics