<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    千里冰封
    JAVA 濃香四溢
    posts - 151,comments - 2801,trackbacks - 0
    使用VC,VB或者C#的開發(fā)者們對(duì)于在程序里面嵌入一個(gè)網(wǎng)頁來說,那真是小事一樁。但是在JAVA里面,卻幾乎是不可能實(shí)現(xiàn)的任務(wù)。JEditorPane雖然說可以打開網(wǎng)頁,但是它那解析速度以及解析質(zhì)量,對(duì)于今天日益復(fù)雜的網(wǎng)頁內(nèi)容來說,就像沒有一樣。今天我們就使用一個(gè)開源的組件(jdic)來實(shí)現(xiàn)在JAVA程序里面嵌入網(wǎng)頁的效率,運(yùn)行界面如下:



    下面言歸正轉(zhuǎn)吧,我們來介紹一下這個(gè)開源的組件,它的名字叫JDIC(JDesktop Integration Components),網(wǎng)址為:https://jdic.dev.java.net/,它提供了一種訪問桌面組件的API,其中JDK6.0就采納了其中了一些,比如系統(tǒng)欄圖標(biāo)的SystemTray和SystemIcon,還有代表桌面的Desktop等等,可見這個(gè)API是挺不錯(cuò)的。由于網(wǎng)頁瀏覽器的特殊性,標(biāo)準(zhǔn)的JDK并沒有把它加入進(jìn)來,但是我們一樣可以下載它來使用這個(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(
    500300);
            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)聽,瀏覽器內(nèi)容的獲取,以及自己調(diào)用瀏覽器來執(zhí)行一段javasript,這些都是很強(qiáng)大并且很實(shí)用的功能。
    怎么樣,這下滿足了一下我們把網(wǎng)頁嵌入到JAVA程序中的愿望了吧。




    盡管千里冰封
    依然擁有晴空

    你我共同品味JAVA的濃香.
    posted on 2007-10-03 08:55 千里冰封 閱讀(13703) 評(píng)論(15)  編輯  收藏 所屬分類: JAVA開源

    FeedBack:
    # re: JAVA網(wǎng)頁瀏覽器
    2007-10-03 10:16 | 翔南
    這個(gè)組件真的很NICE!!
    能不能再詳細(xì)介紹點(diǎn)訪問桌面組件的相關(guān)內(nèi)容捏!!~~
    嘿嘿 謝謝哈  回復(fù)  更多評(píng)論
      
    # re: JAVA網(wǎng)頁瀏覽器
    2007-10-03 10:27 | 千里冰封
    以后我會(huì)再介紹一些很實(shí)用,但是JAVA沒有實(shí)現(xiàn)的功能  回復(fù)  更多評(píng)論
      
    # re: JAVA網(wǎng)頁瀏覽器[未登錄]
    2007-10-03 10:49 | 咖啡
    用過eclipse吧。在例子里面有用swt編的一個(gè)瀏覽器。  回復(fù)  更多評(píng)論
      
    # re: JAVA網(wǎng)頁瀏覽器
    2007-10-03 14:59 | Unmi
    用過eclipse就知道swt中可以嵌入IE或NetScape內(nèi)核瀏覽網(wǎng)頁,可以把這部分組件他離出來用的  回復(fù)  更多評(píng)論
      
    # re: JAVA網(wǎng)頁瀏覽器
    2007-10-03 15:37 | 千里冰封
    但是SWT的太過于龐大了,SWING才是GUI開發(fā)首用的  回復(fù)  更多評(píng)論
      
    # re: JAVA網(wǎng)頁瀏覽器
    2007-10-04 09:29 | Matthew Chen
    @千里冰封
    其實(shí)無論jdic,還是java6里采用的方式,抑或swt,本質(zhì)都是jni的方式去解決這一問題,然后跨平臺(tái)實(shí)現(xiàn)了。比起swt,swing才是真正的龐大,當(dāng)然這也體現(xiàn)了它功能的強(qiáng)大以及速度的相對(duì)延遲,說道gui開發(fā)的首選,如果項(xiàng)目設(shè)計(jì)了和本地操作系統(tǒng)相關(guān)的,就好比這個(gè)瀏覽器,完全可以用swt了,畢竟它多少還是有跨平臺(tái)支持的。  回復(fù)  更多評(píng)論
      
    # re: JAVA網(wǎng)頁瀏覽器
    2007-10-04 11:06 | BeanSoft
    我在 RedHat 9 中文下試 SWT 的 Browser 控件失敗, 各位有何良策啊? 好像要額外裝一個(gè) Mozilla 的調(diào)試包. 本來想做 Code Manager .SWT Linux 版本的, 這下完蛋了. 也許別的系統(tǒng)能用.

    http://html.xamjwg.org/java-browser.jsp 這有個(gè)純 Java 的瀏覽器, 厲害啊, 開源的.
    Lobo (previously known as Warrior) is an open source web browser that is written completely in Java. It is undergoing active development with the aim to fully support HTML 4, Javascript and CSS2.

    下載試了一下, 還行, 沒深入. 純 Java 的如果想定制就容易多了.  回復(fù)  更多評(píng)論
      
    # re: JAVA網(wǎng)頁瀏覽器
    2007-10-04 11:39 | 千里冰封
    相對(duì)SWING來說,SWT的跨平臺(tái)就說得有些牽強(qiáng)了些,并且如果用SWING寫應(yīng)用的話,程序發(fā)布的時(shí)候是不需要附帶任何第三方JAR的,可是用SWT不但要帶JAR還要帶DLL一起發(fā)布,呵呵,最好還是用標(biāo)準(zhǔn)的SWING的實(shí)現(xiàn),畢竟它是標(biāo)準(zhǔn)API的一部份,并且性能的提升也是有目共睹的。:)  回復(fù)  更多評(píng)論
      
    # re: JAVA網(wǎng)頁瀏覽器[未登錄]
    2007-10-04 19:07 | NeedJava
    比較同意樓主千里冰封的觀點(diǎn),如果純粹要速度的話,我只會(huì)用C/C++而不會(huì)用SWT的。

      回復(fù)  更多評(píng)論
      
    # re: JAVA網(wǎng)頁瀏覽器
    2007-10-08 15:15 | origo
    我覺得多一個(gè)dll是不是與跨平臺(tái)相背離了  回復(fù)  更多評(píng)論
      
    # re: JAVA網(wǎng)頁瀏覽器
    2008-01-14 16:35 | cooc
    為什么我的JDIC包里沒

    import org.jdesktop.jdic.browser.IWebBrowser;

    這個(gè)類呢

      回復(fù)  更多評(píng)論
      
    # re: JAVA網(wǎng)頁瀏覽器
    2008-02-29 16:12 | gembin
    Eclipse RCP 不錯(cuò)!  回復(fù)  更多評(píng)論
      
    # re: JAVA網(wǎng)頁瀏覽器
    2008-05-15 21:42 |
    @cooc
    我的jdic怎么也沒有org.jdesktop.jdic.browser.IWebBrowser呢  回復(fù)  更多評(píng)論
      
    # re: JAVA網(wǎng)頁瀏覽器
    2008-08-02 10:39 | cozl
    # re: JAVA網(wǎng)頁瀏覽器
    主站蜘蛛池模板: 18女人水真多免费高清毛片| 亚洲国产午夜电影在线入口| 亚洲无线电影官网| 成年人免费网站在线观看| 永久免费无码网站在线观看 | 亚洲av不卡一区二区三区| 成全视频免费高清| 97在线免费视频| 亚洲国产精品无码久久| 国产精品久久久亚洲| 亚洲日韩精品无码专区加勒比☆| 国产V亚洲V天堂无码久久久| 亚洲国产日韩综合久久精品| 一级日本高清视频免费观看| 一区二区无码免费视频网站| 国产好大好硬好爽免费不卡| 午夜a级成人免费毛片| 手机看黄av免费网址| 中文字幕第13亚洲另类| 色偷偷尼玛图亚洲综合| xxxx日本免费| 久久久www成人免费毛片 | 色欲aⅴ亚洲情无码AV蜜桃| 亚洲人成无码网站在线观看 | 亚洲大尺度无码无码专线一区| 亚洲一级毛片在线观| 亚洲经典在线中文字幕| 中文字幕免费视频精品一| 东方aⅴ免费观看久久av| 亚洲精品国自产拍在线观看 | 免费可以在线看A∨网站| 丰满妇女做a级毛片免费观看| 亚洲精品中文字幕无乱码| 成在线人免费无码高潮喷水| 亚洲A丁香五香天堂网| 一级毛片免费在线观看网站| 久久久无码精品亚洲日韩软件| 亚洲黄色网站视频| 久久久久久精品免费看SSS| 亚洲一区二区三区国产精品无码| 在线看亚洲十八禁网站|