您的位置:首页 > 编程语言 > Java开发

Swing之带超链接的label简单实现。

2013-12-01 23:33 513 查看
可能很多人不知道,Swing其实可以添加html代码的,利用这个特性,我们可以用Label做很多奇特效果,例如可以做一个带超链接的label

import java.awt.Color;
import java.awt.Cursor;
import java.awt.Desktop;
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.JLabel;
/**
*
* 超链接文本标签类
* @author liuxing
*
*/
public 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 LinkLabel(String vText, String vLink) {
  ...
}


我们可以看到,这个类添加了3个鼠标事件。鼠标移入事件、鼠标移除事件、鼠标点击事件:

鼠标移入事件:

@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 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 mouseClicked(MouseEvent e) {
try {
Desktop.getDesktop().browse(link.toURI());
} catch (IOException err) {
err.printStackTrace();
} catch (URISyntaxException err) {
err.printStackTrace();
}
}


直接调用系统提供的api,打开默认浏览器打开网站。

这就是超链接label的简单实现。

最后介绍个学习网站:Here
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息