最近做一個繳費的項目,直接用瀏覽器做終端不安全,
需要把瀏覽器嵌入到java application中,目的是爲了不把瀏覽器中的
工具欄,收藏夾,地址欄等去了,讓用戶不能刷新,關閉程序等。。。
方式一:用jdic開源組件,這種方式有個缺點,不支持firefox,如果把默認瀏覽器設爲firefox就會出錯
具體代碼如下:
import java.awt.BorderLayout;
import java.net.MalformedURLException;
import java.net.URL;
import javax.swing.JFrame;
import javax.swing.JPanel;
import org.jdesktop.jdic.browser.WebBrowser;
import org.jdesktop.jdic.browser.WebBrowserEvent;
import org.jdesktop.jdic.browser.WebBrowserListener;
/**
*TODO java 嵌入瀏覽器
*date:Oct 21, 2009
*time:10:34:09 AM
*author:Administrator
*email:[email protected]
*/
public class MainFrame extends JFrame{
private WebBrowser webBrowser;
private JPanel jPanel;
private String url;
public MainFrame(String name,String url){
super(name);
this.url = url;
init();
//關閉
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public void init(){
//隱藏JFrame的標題欄,必須在顯示之前調用,否則就會拋出異常
//this.setUndecorated(true);
webBrowser = new WebBrowser();
//註冊各種偵聽器
webBrowser.addWebBrowserListener(
new WebBrowserListener() {
public void downloadStarted(WebBrowserEvent event) {;}
public void downloadCompleted(WebBrowserEvent event) {;}
public void downloadProgress(WebBrowserEvent event) {;}
public void downloadError(WebBrowserEvent event) {;}
public void documentCompleted(WebBrowserEvent event) {;}
public void titleChange(WebBrowserEvent event) {;}
public void statusTextChange(WebBrowserEvent event) {;}
public void windowClose(WebBrowserEvent webBrowserEvent) {
}
});
//打開某個網頁
try {
webBrowser.setURL(new URL(url));
} catch (MalformedURLException e) {
System.out.println(e.getMessage());
return;
}
jPanel = new JPanel();
jPanel.setLayout(new BorderLayout());
jPanel.add(webBrowser, BorderLayout.CENTER);
this.getContentPane().add(jPanel, BorderLayout.CENTER);
this.pack();
//全屏
this.setExtendedState(JFrame.MAXIMIZED_BOTH);
//this.setSize(500,500);
this.setVisible(true);
}
public static void main(String[] args){
String url = "http://...";
new MainFrame("電信營業廳繳費終端",url);
}
}
方式二:用 DJ Native Swing 組件(http://djproject.sourceforge.net/ns/index.html),支持firefox
import java.awt.BorderLayout;
import javax.swing.JFrame;
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;
public class EagleBrowser extends JPanel {
private JPanel webBrowserPanel;
private JWebBrowser webBrowser;
private String url;
public EagleBrowser(String url) {
super(new BorderLayout());
this.url = url;
webBrowserPanel = new JPanel(new BorderLayout());
webBrowser = new JWebBrowser();
webBrowser.navigate(url);
webBrowser.setButtonBarVisible(false);
webBrowser.setMenuBarVisible(false);
webBrowser.setBarsVisible(false);
webBrowser.setStatusBarVisible(false);
webBrowserPanel.add(webBrowser, BorderLayout.CENTER);
add(webBrowserPanel, BorderLayout.CENTER);
}
public static void main(String[] args) {
final String url = "http://";
final String title = "電信營業廳繳費終端";
UIUtils.setPreferredLookAndFeel();
NativeInterface.open();
SwingUtilities.invokeLater(new Runnable() {
public void run() {
JFrame frame = new JFrame(title);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(new EagleBrowser(url), BorderLayout.CENTER);
frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
frame.setLocationByPlatform(true);
//frame.setUndecorated(true);
frame.setVisible(true);
}
});
NativeInterface.runEventPump();
}
}