SWT中嵌入Swing
转自:http://blog.sina.com.cn/s/blog_4d0d8bf6010008pz.html
1.为何要在SWT中嵌入Swing?
对于像窗口,菜单这样的图形界面元素来说,Swing能提供的,JFace也能提供。
但对图形操作,如Java2D,Java3D,Batik(www.apache.org)中的SVG处理,JAI中的位图操作等高级功能在SWT或JFace中没有提供。SWT不能使用诸如混叠消除、透明绘制、文本旋转等高级操作。
2.Eclipse 中,SWT EMBEDED常量使嵌入成为可能。
Composite awtContainer=new Composite(parent,SWT.EMBEDED);
java.awt.Frame myframe=SWT_AWT.new_Frame(awtContainer);
现在就可以随心所欲地向Frame对象中添加AWT或Swing对象了。
示例代码:
public class AwtInSwtDemo {
public static void main(String[] args) {
final Display display = Display.getDefault();
final Shell shell = new Shell();
shell.setSize(327, 253);
shell.setText("SWT Application");
shell.setLayout(new RowLayout());
//SWT转换为AWT窗口的核心代码
Composite comp = new Composite(shell, SWT.EMBEDDED);// 必须有SWT.EMBEDDED
java.awt.Frame frame = SWT_AWT.new_Frame(comp);// 只能放frame不能放JFrame
java.awt.Button button = new java.awt.Button();// 可以放JButton等Swing控件
button.setLabel("AWT button");
frame.add(button);
shell.layout();
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
}
}
3.混合环境中的事务处理
用常规方法向AWT或Swing控件中添加监听器,对AWT事件作出响应。
但监听器访问SWT资源时必须小心,因为SWT和AWT在不同的线程中运行,这种访问应封装在一个Runnable对象之中,通过合适的Display方法执行,如syncExec(),asynExec()或timeExec().
4.SWT包内各种类的功能介绍
org.eclipse.swt SWT,SWTException和SWTErrot类,提供了SWT常量与对异常处理的支持,SWT在构造窗口组件和事件处理中有很大的用途。
org.eclipse.swt.accessibility Eclipse易访问性包,专门未残疾人设计
org.eclipse.swt.awt 提供了在SWT程序中嵌入AWT程序的接口
org.eclipse.swt.browser 提供了实现浏览器功能的控件
org.eclipse.swt.custom 除了对应本地的控件外,该包提供了一些自定义的控件
org.eclipse.swt.dnd 提供了对拖放(Drag and Drop)的支持
org.eclipse.swt.events 提供了对SWT事件监视器(Event Listener)的支持,如Button的SelectionListener,Mouse的MouseListener,MouseMoveListener和MouseTrackListener等,还有与这些对应Listener的默认Adapter实现类和Event类
org.eclipse.swt.graphics 包含了SWT中graphic类,如Color,Font和Image等
org.eclipse.swt.internal /* 在网上没有找到相关明确的介绍 有待补充 */
org.eclipse.swt.layout 控制GUI程序Layout的类所在(当然包括了相关的机构数据类),其中有FillLayout,GridLayout和RowLayout以及FormLayout等
org.eclipse.swt.ole.win32 提供了SWT中Win32OLE实现的一些类
org.eclipse.swt.opengl 提供渲染简单的2D图形或复杂的3D游戏图形的支持
org.eclipse.swt.printing 支持打印机的类
org.eclipse.swt.program 支持在SWT程序中使用其他应用程序打开文件
org.eclipse.swt.widgets 是常用、核心SWT窗口小部件(widget)的公有API类定义所在。如Display,Shell,Button,Menu等。一般编写GUI程序用这些Widget即可