トップ 差分 一覧 ソース 検索 ヘルプ RSS ログイン

SWT_AWT

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秒