Java Swing嵌入浏览器
import java.awt.BorderLayout; import java.awt.Toolkit; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.io.RandomAccessFile; import java.net.HttpURLConnection; import java.net.URL; import java.util.ArrayList; import java.util.Arrays; import java.util.Date; import java.util.List; import javax.swing.ImageIcon; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.SwingUtilities; import chrriis.common.UIUtils; import chrriis.dj.nativeswing.swtimpl.NativeInterface; import chrriis.dj.nativeswing.swtimpl.components.JWebBrowser; import chrriis.dj.nativeswing.swtimpl.components.WebBrowserCommandEvent; import chrriis.dj.nativeswing.swtimpl.components.WebBrowserEvent; import chrriis.dj.nativeswing.swtimpl.components.WebBrowserListener; import chrriis.dj.nativeswing.swtimpl.components.WebBrowserNavigationEvent; import chrriis.dj.nativeswing.swtimpl.components.WebBrowserWindowOpeningEvent; import chrriis.dj.nativeswing.swtimpl.components.WebBrowserWindowWillOpenEvent; import com.jacob.activeX.ActiveXComponent; import com.jacob.com.ComThread; import com.jacob.com.Dispatch; import com.jacob.com.Variant; import com.mohe.utils.system.L; /** * 主窗体 * * @author dxm * */ public class MainFrame extends JFrame { private static final long serialVersionUID = -6348199501339114346L; // 最后操作时间 public long lastTime = new Date().getTime(); // 浏览器窗体 private JWebBrowser webBrowser = null; private JLabel lbl = null; private JPanel panel = null; public int pageFlag = 1; /** * 构造器 */ public MainFrame() { initData(); initGUI(); addListance(); } private void initData() { Toolkit toolkit = Toolkit.getDefaultToolkit(); this.setUndecorated(true); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setSize(600, 500); this.setLocationRelativeTo(null); this.setSize(toolkit.getScreenSize()); this.setLocation(0, 0); webBrowser = new JWebBrowser(); webBrowser.navigate(Config.local + Config.index); webBrowser.setBarsVisible(false); webBrowser.setMenuBarVisible(false); webBrowser.setLocationBarVisible(false); webBrowser.setButtonBarVisible(false); webBrowser.setStatusBarVisible(false); ImageIcon icon = new ImageIcon(System.getProperty("user.dir") + "\\城市.gif"); File img = new File(System.getProperty("user.dir") + "\\" + Config.img); if (img.exists()) { icon = new ImageIcon(img.getAbsolutePath()); } lbl = new JLabel(icon); panel = new JPanel(new BorderLayout()); } private void initGUI() { panel.add(webBrowser, BorderLayout.CENTER); this.setContentPane(panel); } private void addListance() { webBrowser.addWebBrowserListener(new WebBrowserListener() { @Override public void windowWillOpen(WebBrowserWindowWillOpenEvent arg0) { lastTime = new Date().getTime(); L.info("___________ windowWillOpen"); } @Override public void windowOpening(WebBrowserWindowOpeningEvent arg0) { lastTime = new Date().getTime(); L.info("___________ windowOpening"); } @Override public void windowClosing(WebBrowserEvent arg0) { lastTime = new Date().getTime(); L.info("___________ windowClosing"); } @Override public void titleChanged(WebBrowserEvent arg0) { lastTime = new Date().getTime(); L.info("___________ titleChanged"); } @Override public void statusChanged(WebBrowserEvent arg0) { lastTime = new Date().getTime(); L.info("___________ statusChanged"); } @Override public void locationChanging(WebBrowserNavigationEvent arg0) { lastTime = new Date().getTime(); L.info("___________ locationChanging"); } @Override public void locationChanged(WebBrowserNavigationEvent arg0) { lastTime = new Date().getTime(); L.info("___________ locationChanged"); // 判断当前页面等级 String locationURL = arg0.getNewResourceLocation(); int index = locationURL.indexOf("pageFlag="); if (index != -1) { pageFlag = Integer.parseInt(locationURL.substring(index + 9, index + 10)); } else { pageFlag = 1; } System.out.println("____________________ pageFlag:" + pageFlag); // 判断下载文件进行打印 index = locationURL.indexOf("fileName="); System.out.println("____________________ file Index:" + index); if (index != -1) { String fs = locationURL.substring(index + 9); L.info("______________________ fileName = " + fs); String[] fns = fs.split(","); try { List<File> flist = downNetFile(Arrays.asList(fns)); doPrintDoc(flist); } catch (IOException e) { e.printStackTrace(); } } SwingUtilities.invokeLater(new Runnable() { public void run() { webBrowser.setVisible(false); webBrowser.setVisible(true); webBrowser.updateUI(); webBrowser.repaint(); panel.updateUI(); panel.repaint(); panel.validate(); } }); } @Override public void locationChangeCanceled(WebBrowserNavigationEvent arg0) { lastTime = new Date().getTime(); L.info("___________ locationChangeCanceled"); } @Override public void loadingProgressChanged(WebBrowserEvent arg0) { lastTime = new Date().getTime(); L.info("___________ loadingProgressChanged"); } @Override public void commandReceived(WebBrowserCommandEvent arg0) { lastTime = new Date().getTime(); L.info("___________ commandReceived"); } }); lbl.addMouseListener(new MouseListener() { @Override public void mouseReleased(MouseEvent arg0) { } @Override public void mousePressed(MouseEvent arg0) { } @Override public void mouseExited(MouseEvent arg0) { } @Override public void mouseEntered(MouseEvent arg0) { } @Override public void mouseClicked(MouseEvent arg0) { change(2); } }); } /** * 屏保切换 */ public void change(final int type) { lastTime = new Date().getTime(); SwingUtilities.invokeLater(new Runnable() { public void run() { if (type == 1) { // 二级,三级页面跳首页 if (pageFlag == 2 || pageFlag == 3) { webBrowser.navigate(Config.local + Config.index); } // else { // webBrowser.setVisible(false); // panel.add(lbl, BorderLayout.CENTER); // } } else { panel.remove(lbl); webBrowser.setVisible(true); } panel.validate(); } }); } /** * 下载网络文件 * * @param nameList * @throws IOException */ private List<File> downNetFile(List<String> nameList) throws IOException { L.info("________________________ downNetFile1"); if (null == nameList || nameList.isEmpty()) { return new ArrayList<File>(); } List<File> flist = new ArrayList<File>(); for (String name : nameList) { L.info("________________________ downNetFile2"); URL url = new URL(Config.local + "/excel/" + name); HttpURLConnection httpConnection = (HttpURLConnection) url.openConnection(); // 设置请求信息 httpConnection.setRequestProperty("GET", "/down.zip HTTP/1.1"); // 设置接受信息 httpConnection.setRequestProperty("Accept", "image/gif,image/x-xbitmap,application/msword"); // 设置连接信息 httpConnection.setRequestProperty("Connection", "Keep-Alive"); // 获得输入流 InputStream input = httpConnection.getInputStream(); // 创建随机文件 flist.add(new File(name)); RandomAccessFile oSavedFile = new RandomAccessFile(name, "rw"); byte[] b = new byte[1024]; int nRead; // 从输入流中读入字节流,然后写到文件中 while ((nRead = input.read(b, 0, 1024)) > 0) { oSavedFile.write(b, 0, nRead); } input.close(); oSavedFile.close(); httpConnection.disconnect(); } return flist; } private void doPrintDoc(List<File> fileList) { if (null == fileList || fileList.isEmpty()) { return; } // 初始化组件 ComThread.InitSTA(); L.info("___________________ start Print 1"); for (File file : fileList) { if (file == null || !file.exists()) { return; } L.info("___________________ start Print 2 :" + file.getAbsolutePath()); int index = file.getName().indexOf("."); String extName = file.getName().toUpperCase().substring(index + 1); String comApp = "Word.Application"; String property = "Documents"; if (extName.equals("DOC") || extName.equals("DOCX") || extName.equals("WPS")) { comApp = "Word.Application"; property = "Documents"; } else if (extName.equals("XLS") || extName.equals("XLSX") || extName.equals("ET")) { comApp = "Excel.Application"; property = "Workbooks"; } else if (extName.equals("PPT") || extName.equals("PPTX") || extName.equals("DPS")) { comApp = "PowerPoint.Application"; property = "Presentations"; } L.info("___________________ start Print 3 :" + comApp); ActiveXComponent axc = new ActiveXComponent(comApp); try { if (!property.equals("Presentations")) { Dispatch.put(axc, "Visible", new Variant(false)); } Dispatch document = axc.getProperty(property).toDispatch(); Dispatch doc = null; if (property.equals("Presentations")) { doc = Dispatch.call(document, "Open", file.getAbsolutePath(), true, true, false).toDispatch(); } else { doc = Dispatch.invoke(document, "Open", Dispatch.Method, new Object[] { file.getAbsolutePath() }, new int[1]).toDispatch(); } L.info("___________________ start Print 3 :" + file.getAbsolutePath()); Dispatch.call(doc, "PrintOut"); Dispatch.call(doc, "Close"); if (!property.equals("Presentations")) { axc.invoke("Quit", new Variant[] {}); } } catch (Exception e) { e.printStackTrace(); } finally { comApp = ""; property = ""; } } ComThread.Release(); } public static void main(String[] args) { L.APPNAME = "Street_cs"; L.LOGF = true; L.initLog(); UIUtils.setPreferredLookAndFeel(); NativeInterface.open(); SwingUtilities.invokeLater(new Runnable() { public void run() { MainFrame frame = new MainFrame(); frame.setVisible(true); new ChangeWait(frame).tryStart(); new ServeSocket(); } }); NativeInterface.runEventPump(); } }
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。