我想在 swing 的 jpanel 中嵌入 swt

我想在 swing 的 jpanel 中嵌入 swt,第1张

每个swt控件创建时需要一个“父”容器,而swing在创建时不需要。

这里提示peer实际指的是swing控件已创建但还未显示,swing控件显示后才会创建对应本地peer,此时才可以添加swt控件。

具体修改方式如下:

private Canvas swtCanvas = new Canvas() {

  @Override

  public void addNotify() {

   super.addNotify()

   synchronized (getTreeLock()) {  

    new Thread(){// 另起线程,以免阻塞

        public void run(){ 

            initMySwt()// swt的初始化都放到这里

        }

    }.start()    

   }

  }

}

由于在不同的 *** 作系统下,提供的控件是不一样的,AWT采用最小公约数的办法,只提供所有 *** 作系统都有的控件。但后来SUN改变了做法,在Swing里除了JFrame,JWinodows,JDialog(记不太清了,好像是这几个)是调用本地 *** 作系统的控件,其它JPanel,JButton之类的都是绘出来的,所以Swing在所有平台看起来都是一样的外观。这样保持了外观一致性,但牺牲了性能。 IBM更喜欢AWT的实现机制,做出了SWT,SWT采用的是最大公倍数的做法。SWT大部分都是用的本地 *** 作系统的控件,一些在windows里有的控件可能在linux下没有,对这种控件才采用自己绘制的方式。SWT采用类似JAVA虚拟机的方式,在不同的平台,有不同的开发包,我们写的java代码是一样的,但不同平台下看起来外观是不一样的,但性能提升很高,据说和C++做的界面速度差不多:) 也许你会问哪种更好,引一名话:this is equivalent to asking whether a harmmer is better than a screw driver,of course ,a hammer wieldded with sufficient force can probably drive a screw into a wall ,and the butt of a screw can be used in a pinch to knock in a nail. However, a good carpenter keeps both harmer and screw drivers in her tool box and will use the tool that is appropriate for the job at hand. 个人感觉以前java做界面完全没有优势,从外观到性能(我很喜欢Swing的look and feel,可以改变风格),SWT的出现改变了性能上的缺点,再加上JFace,及Eclipse的RCP,我还是倾向于用SWT。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/bake/11594596.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-17
下一篇2023-05-17

发表评论

登录后才能评论

评论列表(0条)

    保存