java swing 内置浏览器打开网页显示flash图表-swt Browser应用
今天在网上找了好久如何用在java swing打开网页,从而实现显示网页图表的效果,功夫不负有心人,终于搞定了,下面把所用的类和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);
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步