您的位置:首页 > 编程语言 > Java开发

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

2011-02-25 16:48 513 查看
今天在网上找了好久如何用在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);


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: