Swing和AWT之混用初体验之问题

    昨天项目中碰到一个问题,我的代码在本机跑着正常 然而到其他一台电脑出现 菜单弹出时被其他控件所遮挡。

//----------------------------

【问题描述】:

         1我是java调用DLL封装的SDK文件 在使用其中一个函数时需要知道所操纵窗口的句柄;

         2当前方法是,AWT.Frame --->Swing.Jpanel --->AWT.Label 嵌套窗口 (目的是 方便找到Label句柄);

         3使用a=User32.FindWindow(AWT.Frame);b=User32.FindWindow(a,AWT.Label); b是所需句柄;

         4 Label中显示照片后 会将JMenuBar所弹出JMenu遮挡

         5在xp下 在Jpanel.updata()后 未出现问题,在xp下 Jpanel.repaint()后出现了遮挡问题;

         6在win7下Jpanel.updata()后出现遮挡问题

 

//------------------------------

【知识检索】  经过检索后了解,该问题出现由AWT这个重量级组件和swing这个轻量级组件混用的不可调谐的矛盾,两者的z-order设置方式是不同的。参考原文作者推荐使用Swing 理由在下文说明,然而我项目中需要知道窗口的本地

句柄 所以不得不选择使用AWT。

    Swing是轻量级的 优势是:

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

参考:

http://fantasytree.iteye.com/blog/693509

http://4develop.in/page/J2SE/20080415_18_3fa98d3e-b5a6-40ea-856d-4318bed647e8/repaint%E4%B8%8EupdateUI%E7%9A%84%E4%BD%9C%E7%94%A8%E4%B8%8E%E5%8C%BA%E5%88%AB.html

 

http://hi.baidu.com/menjianguo/blog/item/1c7547a0645f2e80471064b5.html

 

//-------------------------------

【尝试解决与思考】

      1 Swing.JPanel 换成AWT.Panel  ,a=FindWindow(AWT.Panel ); (没有解决遮挡问题)

      2首先添加Jpanel 后添加 JMenuBar;(没有解决问题)

      3将Swing.JMenuBar换成AWT.MenuBar (解决问题)

      

PS:repaint()和updataUI()的区别还要接下来空的时候弄弄清楚

  

 

转载于:https://www.cnblogs.com/tianxuyuan/archive/2012/04/10/2440125.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值