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

  • 相关阅读:
    三、Pandas入门
    二、NumPy入门
    jQuery模拟angular的数据绑定
    ajax里的getJSON的用法
    SQL中关于传递参数为Null的示例
    原生ajax示例
    页面自增加示例
    angular1数据绑定例子
    angular2 工程目录结构介绍
    angular js环境配置
  • 原文地址:https://www.cnblogs.com/cha1r/p/3453195.html
Copyright © 2011-2022 走看看