Java 網(wǎng)頁(yè)瀏覽器組件介紹(全的4種)
《Java 網(wǎng)頁(yè)瀏覽器組件介紹(全的4種)》由會(huì)員分享,可在線閱讀,更多相關(guān)《Java 網(wǎng)頁(yè)瀏覽器組件介紹(全的4種)(7頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、前言 在使用 Java 開(kāi)發(fā)客戶端程序時(shí),有時(shí)會(huì)需要在界面中使用網(wǎng)頁(yè)瀏覽器組件,用來(lái)顯示一段 HTML 或者一個(gè)特定的網(wǎng)址。本文將介紹在界面中使用瀏覽器組件的四種方法,給出示例的代碼,并且分析每種方法的優(yōu)點(diǎn)與不足,便于 Java 開(kāi)發(fā)者在實(shí)際開(kāi)發(fā)過(guò)程中根據(jù)自己的需要來(lái)選擇。 回頁(yè)首 JDK 中的實(shí)現(xiàn) - JEditorPane Swing 是一個(gè)用于開(kāi)發(fā) Java 應(yīng)用程序圖形化用戶界面的工具包,它是以抽象窗口工具包(AWT)為基礎(chǔ)使跨平臺(tái)應(yīng)用程序可以使用任何可插拔的外觀風(fēng)格,而且它是輕量級(jí)(light-weight)組件,沒(méi)有本地代碼,不依賴于操作系統(tǒng)的支持,這是它與 AWT 組件的
2、最大的區(qū)別。 在 Swing 中,有一個(gè)組件是 JEditorPane,它是一個(gè)可以編輯任意內(nèi)容的文本組件。這個(gè)類使用了 EditorKit 來(lái)實(shí)現(xiàn)其操作,對(duì)于給予它的各種內(nèi)容,它能有效地將其類型變換為適當(dāng)?shù)奈谋揪庉嬈鞣N類。該編輯器在任意給定時(shí)間的內(nèi)容類型由當(dāng)前已經(jīng)安裝的 EditorKit 來(lái)確定。 默認(rèn)情況下,JEditorPane 支持以下的內(nèi)容類型: · text/plain 純文本的內(nèi)容,在此情況下使用的工具包是 DefaultEditorKit 的擴(kuò)展,可生成有換行的純文本視圖。 · text/html HTML 文本,在此情況下使用的工具包是 javax.swing.
3、text.html.HTMLEditorKit,它支持 HTML3.2。 · text/rtf RTF 文本,在此情況下使用的工具包是類 javax.swing.text.rtf.RTFEditorKit,它提供了對(duì)多樣化文本格式(Rich Text Format)的有限支持。 JEditorPane 的常用方法 JEditorPane() 創(chuàng)建一個(gè)新的 JEditorPane 對(duì)象 JEditorPane(String url) 根據(jù)包含 URL 規(guī)范的字符串創(chuàng)建一個(gè) JEditorPane JEditorPane(String type,String text) 創(chuàng)建一個(gè)
4、已初始化為給定文件的 JEdiorPane JEditorPane(URL initialPage) 根據(jù)輸入指定的 URL 來(lái)創(chuàng)建一個(gè) JEditorPane scrollToReference(String reference) 將視圖滾動(dòng)到給定的參考位置(也就是正在顯示的 URL 的 URL.getRef 方法所返回的值) setContentType(String type) 設(shè)置此編輯器所處理的內(nèi)容類型 setEditorKit(EditorKit kit) 設(shè)置當(dāng)前為處理內(nèi)容而安裝的工具包 setPage(String url) 設(shè)置當(dāng)前要顯示的 URL, 參數(shù)
5、是一個(gè) String setPage(URL page) 設(shè)置當(dāng)前要顯示的 URL, 參數(shù)是一個(gè) .URL 對(duì)象 setText(String t) 將此 TextComponent 的文本設(shè)置為指定內(nèi)容,預(yù)期以此編輯器的內(nèi)容類型格式提供該內(nèi)容 JEditorPane 顯示網(wǎng)頁(yè) 要使用 JEditorPane 來(lái)顯示 HTML,需要完成以下幾個(gè)步驟: · 創(chuàng)建一個(gè) JEditorPane 對(duì)象 private JEditorPane jep=new JEditorPane(); · 設(shè)置 JEditorPane 顯示的內(nèi)容為 text/html jep.setCo
6、ntentType("text/html"); · 設(shè)置它不可編輯 jep.setEditable(false); · 處理超鏈接事件 jep.addHyperlinkListener(this); JEditorPane 需要注冊(cè)一個(gè) HyperlinkListener 對(duì)象來(lái)處理超鏈接事件,這個(gè)接口定義了一個(gè)方法 hyperlinkUpdate(HyperlinkEvent e),示例代碼如下: public void hyperlinkUpdate(HyperlinkEvent event) { if(event.getEvent
7、Type() == HyperlinkEvent.EventType.ACTIVATED) { try { jep.setPage(event.getURL()); } catch(IOException ioe) { ioe.printStackTrace(); } } } 完整的代碼可以在本文中 下載 到。在這個(gè)例子中,實(shí)現(xiàn)了一個(gè) HyperlinkListene
8、r 接口,在方法實(shí)現(xiàn)中, if(event.getEventType()==HyperlinkEvent.EventType.ACTIVATED) 這行代碼表示首先判斷 HyperlinkListener 的類型,在這里只處理事件類型為 HyperlinkEvent.EventType.ACTIVATED 的事件(即點(diǎn)擊了某個(gè)超鏈接的事件),然后通過(guò)調(diào)用 HyperlinkEvent 的 getURL() 方法來(lái)獲取超鏈接的 URL 地址。 最后通過(guò)調(diào)用 jep.setPage(event.getURL()) 方法,使得 JEditorPane 顯示新的 URL 地址。 JE
9、ditorPane 優(yōu)缺點(diǎn) 由于 JEditorPane 是包含在 J2SE 中的 Swing 中,所以不需要導(dǎo)入第三方的 jar 文件,相對(duì)來(lái)說(shuō)比較簡(jiǎn)單。但是 JEditorPane 類對(duì)于網(wǎng)頁(yè)中的 CSS 的顯示處理以及對(duì) JavaScript 腳本執(zhí)行的支持很弱,而且官方似乎也沒(méi)有對(duì) JEditorPane 類進(jìn)行改進(jìn)的打算,如果想用 JEditorPane 來(lái)顯示常見(jiàn)的網(wǎng)址,會(huì)發(fā)現(xiàn)顯示出來(lái)的頁(yè)面與 IE,Firefox 有很大的差別,而且不能正常地處理頁(yè)面邏輯。所以如果僅僅用來(lái)顯示比較簡(jiǎn)單的 HTML, 用 JEditorPane 還是一個(gè)不錯(cuò)的選擇。 回頁(yè)首 開(kāi)源的 Java
10、Web 瀏覽器實(shí)現(xiàn) - Lobo Lobo 項(xiàng)目是一個(gè)第三方的開(kāi)源 Java 瀏覽器項(xiàng)目,它的官方網(wǎng)站是 http://lobobrowser.org/java-browser.jsp。 它是使用 100%Java 代碼實(shí)現(xiàn)的,而且能完整地支持 HTML4、JavaScript 以及 CSS2,除此之外,它還支持直接的 JavaFX 渲染。 Lobo 本身就已經(jīng)是一個(gè)完整的瀏覽器軟件,同時(shí)它還提供了很多與網(wǎng)頁(yè)瀏覽器相關(guān)的 API,便于 Java 程序員在自己的代碼中使用或者進(jìn)行擴(kuò)展,其中包括渲染引擎 API、瀏覽器 API 以及插件系統(tǒng) API 等等。具體的功能可以在它的官方網(wǎng)站上查看。
11、 Lobo 中的 FramePanel Lobo 中實(shí)現(xiàn) Web 瀏覽器的類叫 FramePanel,它提供了對(duì) HTML 頁(yè)面顯示的封裝,并且提供了一些輔助的方法。下面是一些常見(jiàn)方法的介紹: FramePanel() 創(chuàng)建一個(gè)單獨(dú)的 FramePanel 對(duì)象,它能被添加到任意的 Swing 窗口或者組件上。 boolean back() 瀏覽器返回上一個(gè)頁(yè)面 boolean alert(String message) 打開(kāi)一個(gè)提示對(duì)話框,并且顯示消息 boolean forward() 瀏覽器進(jìn)入下一個(gè)界面 boolean confirm(String message)
12、 打開(kāi)一個(gè)確認(rèn)對(duì)話框,顯示特定的消息 void navigate(String url) 在這個(gè)組件里面顯示特定的網(wǎng)址,參數(shù)一個(gè)網(wǎng)址的 String void reload() 重新加載當(dāng)前的界面 addContentListener(ContentListener listener) 添加一個(gè)內(nèi)容變化的監(jiān)聽(tīng)器 addNavigationListener(NavigationListener listener) 添加一個(gè)導(dǎo)航(所顯示的 URL 變化)的監(jiān)聽(tīng)器 addResponseListener(ResponseListener listener) 添加一個(gè)獲取服務(wù)器返
13、回結(jié)果的監(jiān)聽(tīng)器 使用 FramePanel 要想使用 FramePanel,首先需要在它的官方網(wǎng)站上面下載它的安裝包,然后在安裝目錄下,可以看到有 lobo.jar 以及 lobo-pub.jar,將這兩個(gè) jar 文件添加到 classpath 中。類似于 JEditorPane, 要使用 FramePanel 有以下的步驟: · 創(chuàng)建一個(gè) FramePanel 的對(duì)象 FramePanel browser=new FramePanel(); · 將這個(gè)對(duì)象添加到界面上。Frame 是繼承自 JPanel, 所以可以像其他 Swing 組件一樣地添加到 JPanel 或者
14、窗口上面。 · 通過(guò)調(diào)用 FramePanel.navigate(url) 的方法來(lái)設(shè)置要顯示的網(wǎng)址。 · 不同于 JEditorPane,F(xiàn)ramePanel 已經(jīng)默認(rèn)處理了點(diǎn)擊超鏈接的事件,不需要另外手動(dòng)地編寫代碼來(lái)處理。 Lobo 瀏覽器 API 的優(yōu)缺點(diǎn) 首先 Lobo 的 FramePanel 是 100% 純 Java 的實(shí)現(xiàn),具有良好的可移植性,在 Window/Linux 平臺(tái)下都能正常地運(yùn)行。它相比于 Swing 中的 JEditorPane,對(duì)于 HTML、CSS 的顯示以及對(duì)于 JavaScript 的執(zhí)行都有了比較大的提高。經(jīng)過(guò)實(shí)際的使用測(cè)試,在訪問(wèn)大多數(shù)網(wǎng)頁(yè)的
15、時(shí)候,都能比較正常的顯示,與主流的 IE/Firefox 效果類似,不過(guò)它對(duì)于 CSS 支持還不是很完整,對(duì)于某些比較復(fù)雜的網(wǎng)頁(yè)的,顯示出入比較大。另外 Lobo 項(xiàng)目的文檔還不是特別完善,這可能是限制它廣泛使用的一個(gè)原因。 回頁(yè)首 JDICplus 中的瀏覽器組件 JDIC(Java Desktop Integration Components)項(xiàng)目的背景是當(dāng)可以不考慮 Java 代碼的平臺(tái)可移植性的時(shí)候,能讓 Java 程序與系統(tǒng)無(wú)縫地整合在一起。它提供給 Java 代碼直接訪問(wèn)本地桌面的功能,其中包含了一系列的 Java 包以及工具,包含了嵌入本地瀏覽器組件的功能,啟動(dòng)桌面應(yīng)用程序
16、,在桌面的系統(tǒng)托盤處添加托盤圖標(biāo)以及注冊(cè)文件類型關(guān)聯(lián)等等。 JDICplus 是在 JDIC 項(xiàng)目上的另外一個(gè)擴(kuò)展,它是一個(gè) Java 的 win32 操作系統(tǒng)的擴(kuò)展開(kāi)發(fā)工具包,也就是說(shuō),它只能在 Windows 操作系統(tǒng)上使用,所以不具有平臺(tái)無(wú)關(guān)性。它提供了很多類似于 Windows API 的功能,除了提供了對(duì) IE 組件的封裝之外,還有地圖顯示組件,以及編輯瀏覽 MS Word、MS PPT、MS Excel、MS Outlook、PDF 的組件。JDICplus 的官方網(wǎng)站是 JDICplus 這個(gè)庫(kù)的 DEMO,這里討論的主要是對(duì) Windows IE 封裝的瀏覽器組件。 使用
17、JDICplus 的瀏覽器組件 使用 JDICplus,首先需要的是環(huán)境的配置。JDICplus 需要的是 JDK6.0 或更高的版本,您需要首先從 下載最新的版本。否則代碼不能正常編譯運(yùn)行。 其次是下載 JDICplus 的類庫(kù),然后將它添加到 classpath 中。 JDICplus 中對(duì) IE 封裝的組件是 org.jdic.web.BrTabbed,它除了封裝了網(wǎng)頁(yè)的顯示,還處理了多個(gè)標(biāo)簽頁(yè)的功能,所以它相對(duì)是比較強(qiáng)大的。使用它的步驟如下: · 初始化 JDICplus 組件,設(shè)置它為非設(shè)計(jì)模式。這個(gè)組件它默認(rèn)的模式是設(shè)計(jì)模式,此時(shí)如果用來(lái)顯示 HTML 內(nèi)容,會(huì)有很多無(wú)用
18、的信息。代碼如下: org.jdic.web.BrComponent.DESIGN_MODE = false; · 初始化一個(gè) BrTabbed 組件: private BrTabbed browser=new BrTabbed(); · 添加到界面中,BrTabbed 是 JPanel 的子類,所以能直接在 Swing 中使用,就像其他 Swing 組件一樣添加到 JPanel 或者窗口中。 BrTabbed 類已經(jīng)處理了點(diǎn)擊超鏈接的事件,而且還支持多標(biāo)簽,這些不需要手動(dòng)編寫代碼來(lái)處理。 JDICplus 瀏覽器組件的優(yōu)缺點(diǎn) JDICplus 中的瀏覽器組件使用了 JN
19、I 來(lái)對(duì) IE 進(jìn)行了封裝,所以它顯示的效果與 IE 完全相同(還包括其中的右鍵菜單),而且 BrTabbed 還內(nèi)置了多標(biāo)簽的功能,使用起來(lái)相對(duì)比較簡(jiǎn)單,同樣不需要去處理點(diǎn)擊超鏈接的事件。它的缺點(diǎn)首先在于它必須是使用 JDK6.0 或以上版本,要求比較高,同時(shí)它底層使用的是 Windows 操作系統(tǒng)相關(guān)的 API,所以不具有平臺(tái)無(wú)關(guān)性。 回頁(yè)首 SWT 中的瀏覽器組件 SWT(The Standard Widget Kit)是 Java 的一套開(kāi)源組件庫(kù),它提供了一種高效的創(chuàng)建圖像化用戶界面的能力,也是 Eclipse 平臺(tái)的 UI 組件之一。它相比于 Swing,速度相對(duì)比較快,而且
20、因?yàn)槭褂昧伺c操作系統(tǒng)相同的渲染方式,界面上與操作模式上比較接近操作系統(tǒng)的風(fēng)格。SWT 的跨平臺(tái)性是通過(guò)不同的底層支持庫(kù)來(lái)解決的。 SWT 的 Browser 類 org.eclipse.swt.browser.Browser 類是 SWT 中用來(lái)實(shí)現(xiàn)網(wǎng)頁(yè)瀏覽器可視化組件的類,它能顯示 HTML 文檔,并且實(shí)現(xiàn)文檔之間的超鏈接。它主要有以下的方法。 boolean back() 當(dāng)前的會(huì)話返回到歷史上前一個(gè)界面 boolean execute(String script) 執(zhí)行特定的腳本 boolean forward() 當(dāng)前的會(huì)話前進(jìn)到歷史上下一個(gè)頁(yè)面 void
21、 refresh() 刷新顯示當(dāng)前的界面 setText(String html) 顯示特定的 HTML 內(nèi)容 setUrl(String url) 顯示特定的網(wǎng)頁(yè)內(nèi)容,傳入的參數(shù)是網(wǎng)頁(yè)的地址 使用 Browser 類 以下的代碼演示了如何使用 SWT 中的 Browser 類: · SWT 的 Browser 類 demo package org.dakiler.browsers; import org.eclipse.swt.SWT; import org.eclipse.swt.browser.Browser;
22、 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 clas
23、s 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);
24、 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("輸入網(wǎng)址 :"); label.setBounds(5, 5, 100, 25);
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.g
26、etText().trim(); if(input.length()==0)return; if(!input.startsWith("http://")) { input="http://"+input; text.setText(input); } browser.setUrl(input); }
27、 }); shell.open(); while (!shell.isDisposed()) { if (!display.readAndDispatch()) display.sleep(); } display.dispose(); } } 回頁(yè)首 結(jié)束語(yǔ) 本文介紹了四種在 Java 圖形界面中顯示 HTML 或者特定網(wǎng)頁(yè)的方法,包括 Swing 中的 JEditorPane 組件、Lobo 瀏覽器的實(shí)現(xiàn)、JDICplus 以及 SWT 的 Browser 組件。 對(duì)于熟練使用 SWT 的 Java 開(kāi)發(fā)者來(lái)說(shuō),使用 SWT 中的瀏覽器組件是一個(gè)很好的選擇。如果是對(duì)于使用 Swing 的程序員來(lái)說(shuō),如果僅僅是顯示不太復(fù)雜的 HTML,JEditorPane 就可以勝任了;如果不需要考慮到軟件的可移植性,只需要在 Windows 下運(yùn)行,那么使用 JDICplus 的瀏覽器組件是一個(gè)很好的選擇;如果需要考慮可移植性,可以考慮使用 Lobo 瀏覽器。
- 溫馨提示:
1: 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 隱蔽工程驗(yàn)收要點(diǎn)
- 給排水中水泵揚(yáng)程與壓力的關(guān)系
- 水泥廠燒成回轉(zhuǎn)窯中控操作問(wèn)題解答
- 地暖安裝注意事項(xiàng)
- 水泥廠中控操作自動(dòng)化專業(yè)試題(附答案)
- 防水套管的應(yīng)用與分類
- 施工現(xiàn)場(chǎng)職業(yè)健康管理制度
- 常見(jiàn)基坑工程的支護(hù)方式
- 水泥包裝車間各崗位職責(zé)
- 打樁機(jī)的種類
- 水泥磨操作員試題(附答案)
- 鋼結(jié)構(gòu)工程量計(jì)算注意事項(xiàng)
- 水泥控制工試題(附答案)
- 水泥生產(chǎn)工藝類知識(shí)考試題(附答案)-
- 鋼結(jié)構(gòu)安裝施工安全技術(shù)交底范文