swt-awt swtのBrowserをswingの上で表示するための準備2 2010/01/10


かなり前に書いた記事。
すぐにコードを利用したいのでちょっと補完しておきます。

elipseでswtを利用したい場合、僕はeclipseのpluginからswt.jarをコピーしてワークスペースのプロジェクトのlibフォルダにおいておきます。
あわせて、sourceももってきます。

こんな感じ。


以下、swt経由でbrowserを呼び出しコード
package a;

import java.awt.BorderLayout;
import java.awt.Canvas;
import java.awt.Dimension;
import java.net.MalformedURLException;

import javax.swing.JFrame;

import org.eclipse.swt.SWT;
import org.eclipse.swt.awt.SWT_AWT;
import org.eclipse.swt.browser.Browser;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;

public class Main {

public static void main(String[] args) throws MalformedURLException {
final Canvas canvas = new Canvas();
JFrame frame = new JFrame() {
{
setSize(new Dimension(400, 500));
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
getContentPane().setLayout(new BorderLayout());
getContentPane().add(canvas, BorderLayout.CENTER);
}

};

// 先に表示する。
frame.setVisible(true);
b(canvas);

}

public static void b(java.awt.Canvas canvas) throws MalformedURLException {

Display display = new Display();
Shell shell = SWT_AWT.new_Shell(display, canvas);
shell.setLayout(new FillLayout());

Browser browser = new Browser(shell, SWT.NONE);
boolean rc = browser.setUrl("http://www.yahoo.co.jp");
shell.setSize(canvas.getWidth(), canvas.getHeight());
shell.pack();

while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}

}

}

: