資料來源: 在JAVA程式內嵌入一個瀏覽器物件
最基本的方法是用JEditPane,不過JEditPane只能讀出最基本的HTML語言,效果對於嵌入JavaScript和CSS這類直譯式語的網頁言簡直是個噩夢。
第二種方法是使用JDIC(JDesktop Integration Components),他提供了一個外部嵌入式的IE核心,但是JDIC的穩定度亦受到大家的質疑,特別是當你瀏覽網頁時會三不五時的跳出JavaScript錯誤的警告視窗,這個問題至今似乎仍是無解。
不過扣除嵌入式瀏覽器之外JDIC的確是很好的一個API,他打破了JAVA長久以來的受困於「跨平台魔咒」的尷尬窘境,用非常簡單的幾行程式碼就能讓設計者的程式與作業系統桌面進行整合互動,這也是JDIC最大的優點。
第三種方法,也是目前我測試過最穩定的一種,使用DJNativeSwing來實現瀏覽器,由於他是基於SWT的元件,所以執行起來的效果很流暢,正常情況下幾乎不會當機。
JAVA中視覺化元件分為三種,AWT(Abstract Windows Toolkit)、SWING、SWT(Standard Widget Toolkit),分別有不同的優點,SWT可以在Application上與其他兩者混合使用(Applet就不行了)。
OK 切入正題,今天要說的就是如何將DJNativeSwing的SWT瀏覽器套用於Swing介面之下。
我想...混合式開發已經是一種趨勢,何況這兩者已經是同一種語言下的物件,就如同一樣東西一定要擺對位置才能發揮最大的效能,既然SWT提供了能夠與系統最佳整合的高效率元件,我們當然可以拿來使用把像瀏覽解析網頁這樣超重量級的運算丟給高效能的SWT去跑。
DJNativeSwing可以和Swing混用,嵌入在Swing裡面是可行的,做法其實只要在你每次調用DJNativeSwing提供的物件方法時加先上一行NativeInterface.open();
例如:
public class NewWebBrowser extends JPanel{
private final JWebBrowser webBrowser;
public NewWebBrowser(){
//瀏覽器初始化...
//super(new BorderLayout());...把你在官方Demo範例上看到的counstruct那整段貼上來就對了
}
//用新的函數包起來
public void set_url(String url){
//記得每當你要調用一次webBrowser內部方法時就必須開一次NativeInterface
NativeInterface.open();
this.webBrowser.navigate(url);
}
}
把這個class編譯之後就做成了一個可以讓Application下的Swing調用的瀏覽器元件而且非常的穩定^_^。
要用的時候只要 xxx.add(new NewWebBrowser ());
編譯執行時你就會看到你的Swing容器內有一個瀏覽器了。
值得注意的地方是SWT的look & feel 無法做到像Swing那樣做到華麗多變一天一個樣 ,因此在實做時候有些特殊的外觀會無法與之相容。
PS:
要引入djnativeswing提供的函式庫
實做瀏覽器需要另外引入三個jar檔
分別是
DJNativeSwing-SWT.jar
DJNativeSwing.jar
swt.jar
沒有留言:
張貼留言