swt嵌套swing

import java.awt.BorderLayout;
import java.awt.Canvas;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;


import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;


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


public class Window extends JFrame {
	private static final long serialVersionUID = 1L;
	private JPanel panel;
	private JButton b1 = new JButton("GO"),
					b2 = new JButton("Add Data");
	private JTextField textField = new JTextField(50);
	static String path = "http://www.baidu.com";
	static final Display display = Display.getDefault();
	static Canvas canvas = null;
	static Shell shell;
	static Browser browser = null;
	
	public Window() {
		System.setProperty("sun.awt.xembedserver", "true");
		canvas = new Canvas() {
			private static final long serialVersionUID = 1L;
			@Override
			public void addNotify() {
				super.addNotify();
				final Canvas canvas_ = this;
				display.asyncExec(new Runnable() {
					public void run() {
						shell = SWT_AWT.new_Shell(display, canvas);
						shell.setText("Slashdot");
						shell.setLayout(new FillLayout());
						browser = new Browser(shell, SWT.NONE);
						browser.addProgressListener(new ProgressListener() {
							public void changed(ProgressEvent event) {
							}


							public void completed(ProgressEvent event) {
								/*String script = "var a = new Array();" +
												"a = document.getElementsByTagName(\"a\");" +
												"for(i = 0; i < a.length; i++) {" +
												"a[i].target = '_self';" +
												"}";
								browser.execute(script);*/
								System.out.println("网页加载完成!");
							}
						});
						browser.addOpenWindowListener(new OpenWindowListener() {
							@Override
							public void open(WindowEvent event) {
								final Browser browser2 = new Browser(shell, SWT.NONE);
								event.browser = browser2;
								event.display.asyncExec(new Runnable() {
									@Override
									public void run() {
										browser.setUrl(browser2.getUrl());
									}									
								});
							}
							
						});
						browser.setUrl(path);
						browser.setVisible(true);
						shell.setSize(canvas_.getWidth(), canvas_.getHeight());
						shell.open();
						while(!shell.isDisposed()){
							if(!display.readAndDispatch()){
								display.sleep();
							}
						}
					}
				});
			}
		};
		panel = new JPanel();
		panel.setLayout(new FlowLayout());
		panel.add(textField);
		b1.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				path = textField.getText();
				display.asyncExec(new Runnable() {
					public void run() {
						browser.setUrl(path);
					}
				});
			}
			
		});
		panel.add(b1);
		add(BorderLayout.NORTH, panel);
		add(BorderLayout.CENTER, canvas);
		setSize(800, 600);
		ImageIcon ii = new ImageIcon(this.getClass().getResource("image/debug_wiz.png")); 
		setIconImage(ii.getImage());
		setTitle("swt嵌入swing");
		setBounds(200, 200, 800, 600);
		setVisible(true);
	}
	
	static Window window;
	
	public static void main(String[] args) {
		SwingUtilities.invokeLater(new Runnable() {
			public void run() {
				window = new Window();
			}
		});
		while(true){
			if(!display.readAndDispatch()){
				display.sleep();
			}
		}
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值