使用VC,VB或者C#的開(kāi)發(fā)者們對(duì)于在程序里面嵌入一個(gè)網(wǎng)頁(yè)來(lái)說(shuō),那真是小事一樁。但是在JAVA里面,卻幾乎是不可能實(shí)現(xiàn)的任務(wù)。JEditorPane雖然說(shuō)可以打開(kāi)網(wǎng)頁(yè),但是它那解析速度以及解析質(zhì)量,對(duì)于今天日益復(fù)雜的網(wǎng)頁(yè)內(nèi)容來(lái)說(shuō),就像沒(méi)有一樣。今天我們就使用一個(gè)開(kāi)源的組件(jdic)來(lái)實(shí)現(xiàn)在JAVA程序里面嵌入網(wǎng)頁(yè)的效率,運(yùn)行界面如下:
下面言歸正轉(zhuǎn)吧,我們來(lái)介紹一下這個(gè)開(kāi)源的組件,它的名字叫JDIC(JDesktop Integration Components),網(wǎng)址為:
https://jdic.dev.java.net/,它提供了一種訪問(wèn)桌面組件的API,其中JDK6.0就采納了其中了一些,比如系統(tǒng)欄圖標(biāo)的SystemTray和SystemIcon,還有代表桌面的Desktop等等,可見(jiàn)這個(gè)API是挺不錯(cuò)的。由于網(wǎng)頁(yè)瀏覽器的特殊性,標(biāo)準(zhǔn)的JDK并沒(méi)有把它加入進(jìn)來(lái),但是我們一樣可以下載它來(lái)使用這個(gè)功能。明顯地,這個(gè)功能是用本地方法實(shí)現(xiàn)的,所以下載完以后,把jdic.dll放到我們的path目錄中,比如system32文件夾下面,然后我們就可以使用它的功能從而增加我們的JAVA程序了。
上面的例子代碼如下:
/*
* Test1.java
*
* Created on 2007-10-2, 17:29:30
*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package test2;
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
import org.jdesktop.jdic.browser.IWebBrowser;
import org.jdesktop.jdic.browser.WebBrowser;
import org.jdesktop.jdic.browser.WebBrowserEvent;
import org.jdesktop.jdic.browser.WebBrowserListenerAdapter;
/**
*
* @author hadeslee
*/
public class Test1 extends JPanel implements ActionListener {
private JTextField input;
private JButton go;
private IWebBrowser web;
public Test1() {
super(new BorderLayout());
initWindow();
}
private void initWindow() {
try {
web = new WebBrowser();
web.addWebBrowserListener(new MyListener());
go = new JButton("轉(zhuǎn)到");
input = new JTextField();
JPanel up = new JPanel(new BorderLayout());
up.add(input, BorderLayout.CENTER);
up.add(go, BorderLayout.EAST);
this.add(up, BorderLayout.NORTH);
this.add(web.asComponent(), BorderLayout.CENTER);
input.addActionListener(this);
go.addActionListener(this);
} catch (Exception ex) {
Logger.getLogger(Test1.class.getName()).log(Level.SEVERE, null, ex);
}
JFrame jf = new JFrame("JAVA瀏覽器");
jf.add(this, BorderLayout.CENTER);
jf.setSize(500, 300);
jf.setLocationRelativeTo(null);
jf.setVisible(true);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public void actionPerformed(ActionEvent ae) {
doOpen();
}
private void doOpen() {
try {
String text = input.getText();
if (text == null || text.equals("")) {
return;
}
if (!text.toLowerCase().startsWith("http://")) {
text = "http://" + text;
}
web.setURL(new URL(text));
} catch (MalformedURLException ex) {
Logger.getLogger(Test1.class.getName()).log(Level.SEVERE, null, ex);
}
}
public static void main(String[] args) {
new Test1();
}
private class MyListener extends WebBrowserListenerAdapter {
private MyListener() {
}
@Override
public void documentCompleted(WebBrowserEvent arg0) {
System.out.println("文檔下載完。。。");
web.executeScript("alert('文檔下載完畢!')");
// web.setContent("<html><H1>Hello world!!<H1>" +
// "<a href=http://www.google.cn>點(diǎn)我</a></html>");
// web.removeWebBrowserListener(this);
}
}
}
它比一般的別的實(shí)現(xiàn)好的地方就是,它可以很完全地和JAVA代碼進(jìn)行交互,包括瀏覽器事件的監(jiān)聽(tīng),瀏覽器內(nèi)容的獲取,以及自己調(diào)用瀏覽器來(lái)執(zhí)行一段javasript,這些都是很強(qiáng)大并且很實(shí)用的功能。
怎么樣,這下滿足了一下我們把網(wǎng)頁(yè)嵌入到JAVA程序中的愿望了吧。
盡管千里冰封
依然擁有晴空
你我共同品味JAVA的濃香.
posted on 2007-10-03 08:55
千里冰封 閱讀(13702)
評(píng)論(15) 編輯 收藏 所屬分類(lèi):
JAVA開(kāi)源