zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    打印九九乘法表
    PAT (Basic Level) Practice (中文) 1091 N-自守数 (15分)
    PAT (Basic Level) Practice (中文)1090 危险品装箱 (25分) (单身狗进阶版 使用map+ vector+数组标记)
    PAT (Basic Level) Practice (中文) 1088 三人行 (20分)
    PAT (Basic Level) Practice (中文) 1087 有多少不同的值 (20分)
    PAT (Basic Level) Practice (中文)1086 就不告诉你 (15分)
    PAT (Basic Level) Practice (中文) 1085 PAT单位排行 (25分) (map搜索+set排序+并列进行排行)
    PAT (Basic Level) Practice (中文) 1083 是否存在相等的差 (20分)
    PAT (Basic Level) Practice (中文) 1082 射击比赛 (20分)
    PAT (Basic Level) Practice (中文) 1081 检查密码 (15分)
  • 原文地址:https://www.cnblogs.com/cha1r/p/3453195.html
Copyright © 2011-2022 走看看