2012-03-07 23:07:53|?次阅读|上传:wustguangh【已有?条评论】发表评论
关键词:Java, Swing, 界面设计|来源:唯设编程网
本文详细介绍了使用JLabel实现超链接效果,用户可以分别指定标签显示的文字和对应的URL地址。如果用户指定的URL地址不合法,程序会输出对应的异常。实现的效果主要包括取得鼠标焦点时JLabel标签显示成蓝色,鼠标形状编程手型,显示下划线,失去鼠标焦点时恢复正常的显示状态:黑色、默认鼠标形状、无下划线,如果用户点击超链接JLabel标签是,使用系统默认的浏览器打开对应的网址。
示例代码:
package Test; import java.awt.Color; import java.awt.Cursor; import java.awt.Desktop; import java.awt.FlowLayout; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.io.IOException; import java.net.MalformedURLException; import java.net.URISyntaxException; import java.net.URL; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; /** * 超链接文本标签 * */ class LinkLabel extends JLabel{ private static final long serialVersionUID = 1L; /**超链接显示的文字*/ private String text; /**保存连接*/ private URL link=null; /**保存标签的默认颜色*/ private Color preColor=null; /** * 构造一个超链接 * @param vText 显示的文字 * @param vLink 连接地址 */ public LinkLabel(String vText, String vLink) { super("<html>"+vText+"</html>"); this.text=vText; try { if(!vLink.startsWith("http://")) vLink="http://"+vLink; this.link=new URL(vLink); } catch (MalformedURLException err) { err.printStackTrace(); } this.addMouseListener(new MouseAdapter() { @Override public void mouseExited(MouseEvent e) { LinkLabel.this.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); if(preColor!=null) LinkLabel.this.setForeground(preColor); LinkLabel.this.setText("<html>"+text+"</html>"); } @Override public void mouseEntered(MouseEvent e) { LinkLabel.this.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); preColor=LinkLabel.this.getForeground(); LinkLabel.this.setForeground(Color.BLUE); LinkLabel.this.setText("<html><u>"+text+"</u></html>"); } @Override public void mouseClicked(MouseEvent e) { try { Desktop.getDesktop().browse(link.toURI()); } catch (IOException err) { err.printStackTrace(); } catch (URISyntaxException err) { err.printStackTrace(); } } }); } } /** * 测试类 * */ public class TestLinkLabel extends JFrame{ private static final long serialVersionUID = 1L; public TestLinkLabel(){ this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setTitle("超链接标签"); this.setLayout(new FlowLayout(FlowLayout.TRAILING,50,50)); this.add(new LinkLabel("导航网站","www.hao123.com")); this.add(new JButton("测试导航")); this.pack(); this.setVisible(true); } public static void main(String[] args){ new TestLinkLabel(); } }
使JLabel支持下划线有多种方法,比如除了本文使用的HTML标签外,还可以重写JLabel的PaintComponent方法,但是和其它方法相比,使用HTML更加简洁,并且实现更加灵活,除本文需要的下划线意外,JLabel使用HTML标签还可以实现其它多种多种效果,如设置字号、字体、文字颜色、对其方式等。Swing的其它控件,如JTable、JButton等均支持HTML标签。