Swing/AWTとSWTを連携させるためにorg.eclipse.swt.awt.SWT_AWTクラスが用意されています。
このクラスは2つのstaticメソッドを持っており、Swing/AWTのCanvasオブジェクトからSWTのShellを、SWTのCompositeオブジェクトからSwing/AWTのFrameオブジェクトを生成することができるようになっています。
まずはSWTのCompositeにSwingのウィジェットを表示してみます。new_Frame()メソッドを使います。
Frame frame = SWT_AWT.new_Frame(new Composite(parent,SWT.EMBEDDED)); frame.setLayout(new FlowLayout()); frame.add(new JLabel("Swingのラベル")); frame.add(new JButton("Swingのボタン")); ...
new_Shell()メソッドを使うと、逆にSwingにSWTのウィジェットを埋め込むことができます。
JFrame frame = new JFrame(); Container cp = frame.getContentPane(); Canvas canvas = new Canvas(); cp.add(canvas,BorderLayout.CENTER); frame.setVisible(true); Display display = new Display(); Shell shell = SWT_AWT.new_Shell(display,canvas); shell.setLayout(new FillLayout()); Button button = new Button(shell,SWT.PUSH); button.setText("SWTのボタン"); shell.pack(); while (!shell.isDisposed()) { if (!display.readAndDispatch()){ display.sleep (); } }
注意が必要な点として、SWTとSwingのUIスレッドはそれぞれ独立して動作しています。そのため、例えばSwingのイベントリスナからSWTのウィジェットを操作する場合などは、Display#syncExec()メソッドやDisplay#asyncExec()メソッドを使ってSWTのUIスレッドで処理を行う必要があります(逆も同様です)。
最終更新時間:2005年08月21日 05時51分13秒