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

来源:互联网 发布:公司客户数据保密制度 编辑:程序博客网 时间:2024/04/30 11:06

可能很多人不知道,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

原创粉丝点击