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


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

  • 相关阅读:
    邮箱正则表达式写法
    java中的的正则表达式
    Java中重载(overload)和重写(override)的区别
    内部类的使用规范
    Java静态代码块(static block)调用陷阱小记
    sychronized关键字的使用
    关于java中一次编译多个源文件时的编译顺序的问题
    java中内部类的访问调用
    map的三种遍历方法
    Java堆.栈和常量池
  • 原文地址:https://www.cnblogs.com/cha1r/p/3453195.html
Copyright © 2020-2023  润新知