用過NetBeans的朋友可能會發現,在NB的窗體界面中,有一些JLabel以圖標形式出現,當鼠標點擊這些label標簽時,會自動打開我們的浏覽器,並導航到相應的網站。
這個功能看起來似乎比較簡單,可能有的朋友會想到用Runtime來調用本地浏覽器。但這個方法太呆板了,有很大的局限性。首先,如果通過本地路徑來調用,勢必在可移植性上打了折扣。因為不同系統之間,不可能有相同的系統路徑。其次,如果用戶有多個浏覽器,如既安裝了ie還安裝了firefox,而用戶平時更喜歡在Firefox中浏覽網頁,我們就不能強迫他用IE來打開我們要顯示的信息。
而我們現在不需要為這些功能費腦細胞了,因為在JDK6中新增加的Desktop類為我們解決了這個問題。它不僅允許我們可以檢測並打開默認浏覽器,還允許我們檢測並打開默認的郵件客戶端,以及打開編輯和打印文件的功能。
這裡我只給大家演示打開默認浏覽器的功能,實現這樣一個功能很簡單,我們可以把它封裝到一個類中,如果我們想把一個帶圖標的JLabel做成一個超鏈接效果,就可以給JLabel組件增加鼠標事件,來調用我們下邊的代碼,打開系統的默認浏覽器。
代碼如下:
package org.anthrax; import java.awt.Cursor; import java.awt.Desktop; import java.io.IOException; import java.net.MalformedURLException; import java.net.URI; import Java.Net.URISyntaxException; import Javax.swing.JLabel; /** * * @author Anthrax *此類負責檢測系統的默認浏覽器等程序,並負責啟動它們 * @netSite 指定要顯示的網址 */ public class DesktopRuner { private Desktop desktop; private URI uri; private String netSite; private Cursor hander; /** Creates a new instance of DesktopRuner */ public DesktopRuner() { this.desktop = Desktop.getDesktop(); } /* *檢測系統是否支持浏覽器 */ public boolean checkBroswer(){ if(desktop.isDesktopSupported() && desktop.isSupported(Desktop.Action.BROWSE)){ return true; } else{ return false; } } /* *運行默認浏覽器,並在其中顯示指定網址 */ public void runBroswer(){ netSite = "http://mybass.china-pub.com"; try { uri = new URI(netSite); } catch (URISyntaxException ex) { ex.printStackTrace(); } try { desktop.browse(uri); } catch (IOException ex) { ex.printStackTrace(); } } /* *改變鼠標形狀 */ public void changeMouse(JLabel label){ hander = new Cursor(Cursor.HAND_CURSOR); label.setCursor(hander); } }