swt嵌套swing
2015-10-19 22:16
232 查看
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(); } } } }
相关文章推荐
- 基于Linux C语言的字符界面《推箱子》
- Linux head 命令 【转载】
- Android 触摸及手势操作GestureDetector
- 学员真正想要的UI设计培训公开课
- 国外的一些优秀单页滚动页面设计分享
- 一篇随笔
- java同步关键字Synchronized 的实现原理
- 菜鸟学算法之POJ1636 Prison Rearrangement
- WHY YOUR PRIVATE CLOUD COULD LOOK A LOT LIKE PAAS
- hdu2103 Family planning
- 学习小记(2015/10/19)——工作中遇见的一个关于jQuery选择器的小要点。
- Bentley.PULS.XM.V8.9.0.28 数字管道脉动分析/海洋结构DNV sesam suite 2013 Full 1CD
- 滴滴打车交互设计详细分析
- 顺序栈-C++实现
- 软件开发精品小工具
- golang.org 不能访问
- 数据结构相关的一些定义
- SQL语法 (Structured Query Language)
- 13.Python标准库_循环器 (itertools)
- UI设计培训中所需要的手绘能力