程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Java網頁浏覽器組件介紹

Java網頁浏覽器組件介紹

編輯:關於JAVA

簡介:使用 Java 開發客戶端應用有時會需要使用到浏覽器組件,本文將介紹在 Java 用戶界面中使 用浏覽器的四種方法,並且比較它們各自的優點與不足,便於 Java 開發者在實際開發過程中選擇。

前言

在使用 Java 開發客戶端程序時,有時會需要在界面中使用網頁浏覽器組件,用來顯示一段 HTML 或 者一個特定的網址。本文將介紹在界面中使用浏覽器組件的四種方法,給出示例的代碼,並且分析每種方 法的優點與不足,便於 Java 開發者在實際開發過程中根據自己的需要來選擇。

JDK 中的實現 - JEditorPane

Swing 是一個用於開發 Java 應用程序圖形化用戶界面的工具包,它是以抽象窗口工具包(AWT)為基 礎使跨平台應用程序可以使用任何可插拔的外觀風格,而且它是輕量級(light- weight)組件,沒有本 地代碼,不依賴於操作系統的支持,這是它與 AWT 組件的最大的區別。

在 Swing 中,有一個組件是 JEditorPane,它是一個可以編輯任意內容的文本組件。這個類使用了 EditorKit 來實現其操作,對於給予它的各種內容,它能有效地將其類型變換為適當的文本編輯器種類。 該編輯器在任意給定時間的內容類型由當前已經安裝的 EditorKit 來確定。

默認情況下,JEditorPane 支持以下的內容類型:

text/plain

純文本的內容,在此情況下使用的工具包是 DefaultEditorKit 的擴展,可生成有換行的純文本視圖 。

text/html

HTML 文本,在此情況下使用的工具包是 javax.swing.text.html.HTMLEditorKit,它支持 HTML3.2。

text/rtf

RTF 文本,在此情況下使用的工具包是類 javax.swing.text.rtf.RTFEditorKit,它提供了對多樣化 文本格式(Rich Text Format)的有限支持。

JEditorPane 的常用方法

JEditorPane()

創建一個新的 JEditorPane 對象

JEditorPane(String url)

根據包含 URL 規范的字符串創建一個 JEditorPane

JEditorPane(String type,String text)

創建一個已初始化為給定文件的 JEdiorPane

JEditorPane(URL initialPage)

根據輸入指定的 URL 來創建一個 JEditorPane

scrollToReference(String reference)

將視圖滾動到給定的參考位置(也就是正在顯示的 URL 的 URL.getRef 方法所返回的值)

setContentType(String type)

設置此編輯器所處理的內容類型

setEditorKit(EditorKit kit)

設置當前為處理內容而安裝的工具包

setPage(String url)

設置當前要顯示的 URL, 參數是一個 String

setPage(URL page)

設置當前要顯示的 URL, 參數是一個 java.net.URL 對象

setText(String t)

將此 TextComponent 的文本設置為指定內容,預期以此編輯器的內容類型格式提供該內容

JEditorPane 顯示網頁

要使用 JEditorPane 來顯示 HTML,需要完成以下幾個步驟:

創建一個 JEditorPane 對象

private JEditorPane jep=new JEditorPane();

設置 JEditorPane 顯示的內容為 text/html

jep.setContentType("text/html");

設置它不可編輯

jep.setEditable(false);

處理超鏈接事件

jep.addHyperlinkListener(this);

JEditorPane 需要注冊一個 HyperlinkListener 對象來處理超鏈接事件,這個接口定義了一個方法 hyperlinkUpdate(HyperlinkEvent e),示例代碼如下:

public void hyperlinkUpdate(HyperlinkEvent event)
{
   if(event.getEventType() == HyperlinkEvent.EventType.ACTIVATED)
   {
     try
     {
       jep.setPage(event.getURL());
     }
     catch(IOException ioe)
     {
       ioe.printStackTrace();
     }
   }
}

完整的代碼可以在本文中 下載 到。在這個例子中,實現了一個 HyperlinkListener 接口,在方法實 現中,

if(event.getEventType()==HyperlinkEvent.EventType.ACTIVATED) 

這行代碼表示首先判斷 HyperlinkListener 的類型,在這裡只處理事件類型為 HyperlinkEvent.EventType.ACTIVATED 的事件(即點擊了某個超鏈接的事件),然後通過調用 HyperlinkEvent 的 getURL() 方法來獲取超鏈接的 URL 地址。

最後通過調用 jep.setPage(event.getURL()) 方法,使得 JEditorPane 顯示新的 URL 地址。

JEditorPane 優缺點

由於 JEditorPane 是包含在 J2SE 中的 Swing 中,所以不需要導入第三方的 jar 文件,相對來說比 較簡單。但是 JEditorPane 類對於網頁中的 CSS 的顯示處理以及對 JavaScript 腳本執行的支持很弱, 而且官方似乎也沒有對 JEditorPane 類進行改進的打算,如果想用 JEditorPane 來顯示常見的網址,會 發現顯示出來的頁面與 IE,Firefox 有很大的差別,而且不能正常地處理頁面邏輯。所以如果僅僅用來顯 示比較簡單的 HTML, 用 JEditorPane 還是一個不錯的選擇。

開源的 Java Web 浏覽器實現 - Lobo

Lobo 項目是一個第三方的開源 Java 浏覽器項目,它的官方網站是 http://lobobrowser.org/java- browser.jsp。 它是使用 100%Java 代碼實現的,而且能完整地支持 HTML4、JavaScript 以及 CSS2,除 此之外,它還支持直接的 JavaFX 渲染。

Lobo 本身就已經是一個完整的浏覽器軟件,同時它還提供了很多與網頁浏覽器相關的 API,便於 Java 程序員在自己的代碼中使用或者進行擴展,其中包括渲染引擎 API、浏覽器 API 以及插件系統 API 等等。具體的功能可以在它的官方網站上查看。

Lobo 中的 FramePanel

Lobo 中實現 Web 浏覽器的類叫 FramePanel,它提供了對 HTML 頁面顯示的封裝,並且提供了一些輔 助的方法。下面是一些常見方法的介紹:

FramePanel()

創建一個單獨的 FramePanel 對象,它能被添加到任意的 Swing 窗口或者組件上。

boolean back()

浏覽器返回上一個頁面

boolean alert(String message)

打開一個提示對話框,並且顯示消息

boolean forward()

浏覽器進入下一個界面

boolean confirm(String message)

打開一個確認對話框,顯示特定的消息

void navigate(String url)

在這個組件裡面顯示特定的網址,參數一個網址的 String

void reload()

重新加載當前的界面

addContentListener(ContentListener listener)

添加一個內容變化的監聽器

addNavigationListener(NavigationListener listener)

添加一個導航(所顯示的 URL 變化)的監聽器

addResponseListener(ResponseListener listener)

添加一個獲取服務器返回結果的監聽器

使用 FramePanel

要想使用 FramePanel,首先需要在它的官方網站上面下載它的安裝包,然後在安裝目錄下,可以看到 有 lobo.jar 以及 lobo-pub.jar,將這兩個 jar 文件添加到 classpath 中。類似於 JEditorPane, 要 使用 FramePanel 有以下的步驟:

創建一個 FramePanel 的對象

FramePanel browser=new FramePanel();

將這個對象添加到界面上。Frame 是繼承自 JPanel, 所以可以像其他 Swing 組件一樣地添加到 JPanel 或者窗口上面。

通過調用 FramePanel.navigate(url) 的方法來設置要顯示的網址。

不同於 JEditorPane,FramePanel 已經默認處理了點擊超鏈接的事件,不需要另外手動地編寫代碼來 處理。

Lobo 浏覽器 API 的優缺點

首先 Lobo 的 FramePanel 是 100% 純 Java 的實現,具有良好的可移植性,在 Window/Linux 平台 下都能正常地運行。它相比於 Swing 中的 JEditorPane,對於 HTML、CSS 的顯示以及對於 JavaScript 的執行都有了比較大的提高。經過實際的使用測試,在訪問大多數網頁的時候,都能比較正常的顯示,與 主流的 IE/Firefox 效果類似,不過它對於 CSS 支持還不是很完整,對於某些比較復雜的網頁的,顯示 出入比較大。另外 Lobo 項目的文檔還不是特別完善,這可能是限制它廣泛使用的一個原因。

JDICplus 中的浏覽器組件

JDIC(Java Desktop Integration Components)項目的背景是當可以不考慮 Java 代碼的平台可移植 性的時候,能讓 Java 程序與系統無縫地整合在一起。它提供給 Java 代碼直接訪問本地桌面的功能,其 中包含了一系列的 Java 包以及工具,包含了嵌入本地浏覽器組件的功能,啟動桌面應用程序,在桌面的 系統托盤處添加托盤圖標以及注冊文件類型關聯等等。

JDICplus 是在 JDIC 項目上的另外一個擴展,它是一個 Java 的 win32 操作系統的擴展開發工具包 ,也就是說,它只能在 Windows 操作系統上使用,所以不具有平台無關性。它提供了很多類似於 Windows API 的功能,除了提供了對 IE 組件的封裝之外,還有地圖顯示組件,以及編輯浏覽 MS Word、 MS PPT、MS Excel、MS Outlook、PDF 的組件。JDICplus 的官方網站是 https://jdic.dev.java.net/documentation/incubator/JDICplus/index.html,這個頁面上展示了很多 使用了 JDICplus 這個庫的 DEMO,這裡討論的主要是對 Windows IE 封裝的浏覽器組件。

使用 JDICplus 的浏覽器組件

使用 JDICplus,首先需要的是環境的配置。JDICplus 需要的是 JDK6.0 或更高的版本,您需要首先 從 www.sun.com 下載最新的版本。否則代碼不能正常編譯運行。

其次是下載 JDICplus 的類庫,然後將它添加到 classpath 中。

JDICplus 中對 IE 封裝的組件是 org.jdic.web.BrTabbed,它除了封裝了網頁的顯示,還處理了多個 標簽頁的功能,所以它相對是比較強大的。使用它的步驟如下:

初始化 JDICplus 組件,設置它為非設計模式。這個組件它默認的模式是設計模式,此時如果用來顯 示 HTML 內容,會有很多無用的信息。代碼如下:

org.jdic.web.BrComponent.DESIGN_MODE = false;

初始化一個 BrTabbed 組件:

private BrTabbed browser=new BrTabbed();

添加到界面中,BrTabbed 是 JPanel 的子類,所以能直接在 Swing 中使用,就像其他 Swing 組件一 樣添加到 JPanel 或者窗口中。

BrTabbed 類已經處理了點擊超鏈接的事件,而且還支持多標簽,這些不需要手動編寫代碼來處理。

JDICplus 浏覽器組件的優缺點

JDICplus 中的浏覽器組件使用了 JNI 來對 IE 進行了封裝,所以它顯示的效果與 IE 完全相同(還 包括其中的右鍵菜單),而且 BrTabbed 還內置了多標簽的功能,使用起來相對比較簡單,同樣不需要去 處理點擊超鏈接的事件。它的缺點首先在於它必須是使用 JDK6.0 或以上版本,要求比較高,同時它底層 使用的是 Windows 操作系統相關的 API,所以不具有平台無關性。

SWT 中的浏覽器組件

SWT(The Standard Widget Kit)是 Java 的一套開源組件庫,它提供了一種高效的創建圖像化用戶 界面的能力,也是 Eclipse 平台的 UI 組件之一。它相比於 Swing,速度相對比較快,而且因為使用了 與操作系統相同的渲染方式,界面上與操作模式上比較接近操作系統的風格。SWT 的跨平台性是通過不同 的底層支持庫來解決的。

SWT 的 Browser 類

org.eclipse.swt.browser.Browser 類是 SWT 中用來實現網頁浏覽器可視化組件的類,它能顯示 HTML 文檔,並且實現文檔之間的超鏈接。它主要有以下的方法。

boolean back()

當前的會話返回到歷史上前一個界面

boolean execute(String script)

執行特定的腳本

boolean forward()

當前的會話前進到歷史上下一個頁面

void refresh()

刷新顯示當前的界面

setText(String html)

顯示特定的 HTML 內容

setUrl(String url)

顯示特定的網頁內容,傳入的參數是網頁的地址

使用 Browser 類

以下的代碼演示了如何使用 SWT 中的 Browser 類:

SWT 的 Browser 類 demo

package org.dakiler.browsers;

import org.eclipse.swt.SWT;
import org.eclipse.swt.browser.Browser;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;

public class SWTBrowserTest
{
   public static void main(String args[])
   {
     Display display=new Display();
     Shell shell=new Shell(display);
     shell.setText("SWT Browser Test");
     shell.setSize(800,600);

     final Text text=new Text(shell,SWT.BORDER);
     text.setBounds(110,5,560,25);
     Button button=new Button(shell,SWT.BORDER);
     button.setBounds(680,5,100,25);
     button.setText("go");
     Label label=new Label(shell,SWT.LEFT);
     label.setText("輸入網址 :");
     label.setBounds(5, 5, 100, 25);

     final Browser browser=new Browser(shell,SWT.FILL);
     browser.setBounds(5,30,780,560);

     button.addListener(SWT.Selection, new Listener()
     {
       public void handleEvent(Event event)
       {
         String input=text.getText().trim();
         if(input.length()==0)return;
         if(!input.startsWith("http://"))
         {
           input="http://"+input;
           text.setText(input);
         }
         browser.setUrl(input);
       }
     });

     shell.open();
     while (!shell.isDisposed()) {
       if (!display.readAndDispatch())
        display.sleep();
      }
      display.dispose();

   }
}

結束語

本文介紹了四種在 Java 圖形界面中顯示 HTML 或者特定網頁的方法,包括 Swing 中的 JEditorPane 組件、Lobo 浏覽器的實現、JDICplus 以及 SWT 的 Browser 組件。

對於熟練使用 SWT 的 Java 開發者來說,使用 SWT 中的浏覽器組件是一個很好的選擇。如果是對於 使用 Swing 的程序員來說,如果僅僅是顯示不太復雜的 HTML,JEditorPane 就可以勝任了;如果不需要 考慮到軟件的可移植性,只需要在 Windows 下運行,那麼使用 JDICplus 的浏覽器組件是一個很好的選 擇;如果需要考慮可移植性,可以考慮使用 Lobo 浏覽器。

本文配套源碼:http://www.bianceng.net/java/201212/735.htm

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved