[转]利用JDK6中新特性快速把JLabel做成超链接

用过NetBeans的朋友可能会发现,在NB的窗体界面中,有一些JLabel以图标形式出现,当鼠标点击这些label标签时,会自动打开我们的浏览器,并导航到相应的网站。
这个功能看起来似乎比较简单,可能有的朋友会想到用Runtime来调用本地浏览器。但这个方法太呆板了,有很大的局限性。首先,如果通过本地路径来调用,势必在可移植性上打了折扣。因为不同系统之间,不可能有相同的系统路径。其次,如果用户有多个浏览器,如既安装了ie还安装了firefox,而用户平时更喜欢在firefox中浏览网页,我们就不能强迫他用ie来打开我们要显示的信息。
而我们现在不需要为这些功能费脑细胞了,因为在JDK6中新增加的Desktop类为我们解决了这个问题。它不仅允许我们可以检测并打开默认浏览器,还允许我们检测并打开默认的邮件客户端,以及打开编辑和打印文件的功能。
这里我只给大家演示打开默认浏览器的功能,实现这样一个功能很简单,我们可以把它封装到一个类中,如果我们想把一个带图标的JLabel做成一个超链接效果,就可以给JLabel组件增加鼠标事件,来调用我们下边的代码,打开系统的默认浏览器。
代码如下:
java 代码
  1. package org.anthrax;   
  2.   
  3. import java.awt.Cursor;   
  4. import java.awt.Desktop;   
  5. import java.io.IOException;   
  6. import java.net.MalformedURLException;   
  7. import java.net.URI;   
  8. import java.net.URISyntaxException;   
  9. import javax.swing.JLabel;   
  10.   
  11.   
  12.   
  13. /**  
  14. *  
  15. * @author Anthrax  
  16.  
  17. *此类负责检测系统的默认浏览器等程序,并负责启动它们  
  18. * @netSite 指定要显示的网址  
  19. */  
  20. public class DesktopRuner {   
  21.     private Desktop desktop;   
  22.     private URI uri;   
  23.     private String netSite;   
  24.     private Cursor hander;   
  25.     /** Creates a new instance of DesktopRuner */  
  26.     public DesktopRuner() {   
  27.         this.desktop = Desktop.getDesktop();   
  28.     }   
  29.     /*  
  30.      *检测系统是否支持浏览器  
  31.      */  
  32.     public boolean checkBroswer(){   
  33.         if(desktop.isDesktopSupported() &&   
  34. desktop.isSupported(Desktop.Action.BROWSE)){   
  35.             return true;   
  36.         }   
  37.         else{   
  38.             return false;   
  39.         }   
  40.     }   
  41.     /*  
  42.      *运行默认浏览器,并在其中显示指定网址  
  43.      */  
  44.     public void runBroswer(){   
  45.         netSite = "http://mybass.china-pub.com";   
  46.         try {   
  47.             uri = new URI(netSite);   
  48.         } catch (URISyntaxException ex) {   
  49.             ex.printStackTrace();   
  50.         }   
  51.         try {   
  52.             desktop.browse(uri);   
  53.         } catch (IOException ex) {   
  54.             ex.printStackTrace();   
  55.         }   
  56.     }   
  57.     /*  
  58.      *改变鼠标形状  
  59.      */  
  60.     public void changeMouse(JLabel label){   
  61.         hander = new Cursor(Cursor.HAND_CURSOR);   
  62.         label.setCursor(hander);   
  63.     }   
  64. }   

你可能感兴趣的:(java,浏览器,IE,Netbeans,firefox)