java swing 内置浏览器打开网页显示flash图表-swt Browser应用

今天在网上找了好久如何用在java swing打开网页,从而实现显示网页图表的效果,功夫不负有心人,终于搞定了,下面把所用的类和swt.jar整理了一下,方便有需要的朋友使用。

用到的swt.jar下载

调用网页的Browser要结合现有的java控件使用,一下是结合panel定义的类(SWTPane.java):

 

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */ 
package desktopapplicationmenu.comm; 
   
import java.awt.BorderLayout; 
import java.awt.Canvas; 
import java.awt.Panel; 
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; 
   
/**
 *
 * @author liujl
 */ 
public class SWTPane extends Panel { 
   
    DisplayThread displayThread; 
    private Canvas canvas; 
   
    public SWTPane() { 
        displayThread = new DisplayThread(); 
        displayThread.start(); 
        canvas = new Canvas(); 
        setLayout(new BorderLayout()); 
        add(canvas, BorderLayout.CENTER); 
    
 public static void main(String args[]) throws Exception { 
   
     java.awt.EventQueue.invokeLater(new Runnable() { 
   
            public void run() { 
                new SWTPane().setVisible(true); 
            
        }); 
        
 
    public void addNotify() { 
        super.addNotify(); 
        Display dis = displayThread.getDisplay(); 
        dis.syncExec(new Runnable() { 
   
            public void run() { 
                Shell shell = SWT_AWT.new_Shell(displayThread.getDisplay(), canvas); 
                shell.setLayout(new FillLayout()); 
                final Browser browser = new Browser(shell, SWT.NONE); 
                browser.setLayoutData(BorderLayout.CENTER); 
                browser.setUrl("http://www.my400800.cn"); 
            
        }); 
    


 

里面为了防止在打开网页的时候出现错误,封装了一下Thread类,定义如下(DisplayThread.java):

 

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package desktopapplicationmenu.comm;
 
import org.eclipse.swt.widgets.Display;
 
/**
 *
 * @author liul
 */
public class DisplayThread extends Thread {
 
    private Display display;
    Object sem = new Object();
 
    public void run() {
        synchronized (sem) {
            display = Display.getDefault();
            sem.notifyAll();
        }
        swtEventLoop();
    }
 
    private void swtEventLoop() {
        while (true) {
            if (!display.readAndDispatch()) {
                display.sleep();
            }
        }
    }
 
    public Display getDisplay() {
        try {
            synchronized (sem) {
                while (display == null) {
                    sem.wait();
                }
                return display;
            }
        } catch (Exception e) {
            return null;
        }
    }
}

调用方法

        SWTPane jbtn_Sel = new SWTPane();
        jPanel1.add(jbtn_Sel);
        jbtn_Sel.setBounds(1, 1, 600, 600);


posted @   ljlxyf  阅读(2097)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示