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

原创 2013年12月01日 23:33:15

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

Swing 实现超链接 打开网页

1、创建一个超链接的JLabel,// 主要是使用下面方法,仅适用于JdK1.6及以上版本   Desktop.getDesktop().browse(    new URL("http://ww...
  • jazywoo123
  • jazywoo123
  • 2012年08月19日 20:54
  • 1279

基于Java Swing的超链接标签

  • 2012年04月24日 17:45
  • 26KB
  • 下载

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

可能很多人不知道,Swing其实可以添加html代码的,利用这个特性,我们可以用Label做很多奇特效果,例如可以做一个带超链接的label import java.awt.Color; i...
  • tanjiayqq
  • tanjiayqq
  • 2013年12月01日 23:33
  • 1030

在JAVA应用按钮实现超链接......

在JAVA应用按钮实现超链接......button.addActionListener(new ActionListener() {   public void actionPerformed(fi...
  • zhq426
  • zhq426
  • 2007年10月27日 19:30
  • 3011

Qt学习之旅---文字超链接和图片超链接的添加

在正式的qt程序中   超链接是一个非常重要的部分        可提供广告、引导等等的便利行为   这里介绍两种超链接的方式     1、文字的超链接     我这里使用的是QLabel控件作文...
  • SeeCandy
  • SeeCandy
  • 2014年01月27日 12:07
  • 2658

给label添加超链接等处理

// // HYBHyperlinkLabel.h // CloudShopping // // Created by sixiaobo on 14-7-10. // Copyright (c...
  • woaifen3344
  • woaifen3344
  • 2014年08月05日 11:00
  • 10920

在Java Swing中显示HTML网页,并能响应链接

from http://www.blogjava.net/Unmi/articles/124111.html
  • lingling1420q
  • lingling1420q
  • 2014年07月18日 11:15
  • 2053

在Java Swing中显示HTML网页,并能响应链接

在Java Swing中显示HTML网页,并能响应链接如果做过Java Swing开发的人应该知道,可以应用HTML标签来给控件增色,如//必须用和包起来JLabel label = new JLab...
  • casularm
  • casularm
  • 2009年01月18日 13:44
  • 23386

swing 学习笔记六(对话框Dialog )

/**  * 对话框  *   * @time 11:09:20 AM  * @author retacn yue  * @Email zhenhuayue@sina.com  */ p...
  • retacn_yue
  • retacn_yue
  • 2012年09月06日 22:47
  • 3265

Qt实现Label超链接效果

写在前言:要么使用自定义槽函数实现,要么就是通过设置label中setOpenExternalLinks中方法实现. 直接贴代码吧: Widget::Widget(QWidget *par...
  • qq_24571549
  • qq_24571549
  • 2017年03月20日 11:31
  • 377
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Swing之带超链接的label简单实现。
举报原因:
原因补充:

(最多只允许输入30个字)