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

最近在给自己的一个搜索下载工具包做一个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一样是不支持皮肤更换机制的。


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

SUN官方swing指南:
[url]http://java.sun.com/docs/books/tutorial/uiswing/[/url]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值