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