JLabel实现超链接效果

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标签。

<12>
发表评论0条 】
网友评论(共?条评论)..
JLabel实现超链接效果