<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)頁瀏覽器
    主站蜘蛛池模板: 鲁大师在线影院免费观看| 亚洲色偷偷综合亚洲AVYP| 无码A级毛片免费视频内谢| 亚洲av永久无码精品网址| 久久久无码精品亚洲日韩京东传媒| 青青青国产色视频在线观看国产亚洲欧洲国产综合 | 亚洲中文久久精品无码ww16| 最新中文字幕免费视频| 免费视频成人手机在线观看网址| 国产精品久久亚洲一区二区| 亚洲国产成人99精品激情在线| 亚洲日本在线看片| 国产A在亚洲线播放| va亚洲va日韩不卡在线观看| 好爽…又高潮了毛片免费看| 99国产精品永久免费视频| 亚洲午夜免费视频| 9久热这里只有精品免费| 国产精品99爱免费视频| 疯狂做受xxxx高潮视频免费| 亚洲狠狠色丁香婷婷综合| 日本亚洲免费无线码| 亚洲成a人片在线观| 亚洲精品福利网站| 亚洲福利秒拍一区二区| 亚洲综合精品香蕉久久网97| 亚洲电影一区二区三区| 亚洲国产成人久久精品动漫| 国产亚洲综合成人91精品| 亚洲午夜未满十八勿入网站2| 亚洲中文字幕无码爆乳av中文| 亚洲国产精品毛片av不卡在线| 夜色阁亚洲一区二区三区| 亚洲福利中文字幕在线网址| 免费一级毛片不卡不收费| JLZZJLZZ亚洲乱熟无码| AV在线播放日韩亚洲欧| 国产亚洲美女精品久久久2020| 国产亚洲精品福利在线无卡一| 亚洲精品国产字幕久久不卡| 亚洲av激情无码专区在线播放|