如何在SWT中使用AWT、SWING组件

如何在SWT中使用AWT、SWING组件,第1张

一、将SWING界面嵌套到SWT控件中/*import org.eclipse.swt.awt.SWT_AWTimport org.eclipse.swt.layout.RowLayoutimport org.eclipse.swt.widgets.Compositeimport org.eclipse.swt.widgets.Displayimport org.eclipse.swt.widgets.Shell/*** swt中显示awt控件final Display display = Display.getDefault()final Shell shell = new Shell()shell.setSize(327, 253)shell.setText("SWT Application")//------------------新插入的界面核心代码---------- shell.setLayout(new RowLayout())Composite comp = new Composite(shell, SWT.EMBEDDED)//SWT.EMBEDDED必须 java.awt.Frame frame = SWT_AWT.new_Frame(comp)//只能放frame不能放JFramejava.awt.Button button = new java.awt.Button()//可以放JButton等Swing控件button.setLabel("AWT button")frame.add(button)//------------------END------------------------shell.layout()shell.open()while (!shell.isDisposed()) {if (!display.readAndDispatch())display.sleep()}}}关键之处在于SWT_AWT.new_Frame()方法,得到的是一个java.awt.Frame对象,要显示的AWT,SWING内容都放在它上面就好。BTW, SWT下免费的图表工具好象很少,只能暂时先这样使用JFreeChart了。Update: 如果要在SWT里显示带有动画效果的AWT图形,最好在Frame上先放一个JPanel这样的带有双缓冲的控件,否则图象在运动时会产生明显的闪烁。二、用SwingWT三、两种方式的对比(1)前者不用改用SWING的软件的源代码,后者需要。

每个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()    

   }

  }

}


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

原文地址: https://outofmemory.cn/bake/11422627.html

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

发表评论

登录后才能评论

评论列表(0条)

保存