在HTML中设置一个超链接是很容易的,使用<a></a>标签就可以完成了。

在客户端应用程序中,并没有这样的标签,但是可以使用按钮来实现,But 有时候就是想好看一点,不想要按钮,只想要个超连接,所以需要自定义这样的一个标签。

那就拿JLable来实现吧:

对于一个超链接来说,需要有链接地址和描述文字,那就直接上代码

首先创建一个LinkLable类,继承JLable,该类应该有如下属性:

public class LinkLabel extends JLabel {
private String text;// 超链接文本
private URL url;// 链接
private Color color = Color.BLUE;// 链接颜色
     public LinkLabel(String text, String url) {
          super("<html>" + text + "</html>");
          this.text = text;
          this.setForeground(Color.BLUE);
          if (!url.startsWith("http://")) {
              url = "http://" + url;
          }
          try {
              this.url = new URL(url);
          } catch (MalformedURLException e) {
              e.printStackTrace();
          }
        // 设置鼠标事件
          this.addMouseListener(new MouseAdapter() {
              @Override
              public void mouseClicked(MouseEvent e) {
                  try {
                      Desktop.getDesktop().browse(LinkLabel.this.url.toURI());//最重要的是这句话,这句话是对点击标签进行web请求的关键
                  } catch (IOException e1) {
                      e1.printStackTrace();
                  } catch (URISyntaxException e1) {
                      e1.printStackTrace();
                  };
              }
       //设置鼠标进入事件,这里只是设置了颜色
              @Override
              public void mouseEntered(MouseEvent e) {
                  LinkLabel.this.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
                  color = LinkLabel.this.getForeground();
                  LinkLabel.this.setForeground(Color.RED);
                  LinkLabel.this.setText("<html>" + LinkLabel.this.text + "</html>");
              }               @Override
              public void mouseExited(MouseEvent e) {
                  LinkLabel.this.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
                  if (color != null) {
                      LinkLabel.this.setForeground(color);
                  }
                  LinkLabel.this.setText("<html>" + LinkLabel.this.text + "</html>");
              }
          });
      }
  }

上述代码实现了进行web访问LinkLable,那么有时候不是访问web页面,只是应用程序呢?

其实很简单,只需要改变鼠标点击事件mouseClicked方法的实现就好了,

String url = LocalLinkLabel.this.url;
if("register".equals(url)){
System.out.println("here");
((JFrame)LocalLinkLabel.this.getParent().getParent()
.getParent().getParent().getParent()).dispose();
new RegisterFrame();
}

看到这么多getParent()方法是不是很疑惑?其实只不过是找到该窗体可通过System.out.print(this.getParent())直到找到待关闭的窗体即可;

Java Swing应用程序JLable超链接的更多相关文章

  1. Java Swing应用程序 JComboBox下拉框联动查询

    在web项目中,通过下拉框.JQuery和ajax可以实现下拉框联动查询. 譬如说,当你查询某个地方时,页面上有:省份:<下拉框省份> 市区:<下拉框市区> 县乡:<下拉 ...

  2. Java Swing创建自定义闪屏:在闪屏上添加Swing进度条控件(转)

    本文将讲解如何做一个类似MyEclipse启动画面的闪屏,为Java Swing应用程序增添魅力. 首先看一下效果图吧, 原理很简单,就是创建一个Dialog,Dialog有一个进度条和一个Label ...

  3. java swing 添加 jcheckbox复选框

    总体上而言,Java Swing编程有两大特点:麻烦.效果差. 麻烦是说由于设计器的使用不方便(如果您希望使用窗体设计器通过快速拖拽控件建立您的Java Swing GUI程序,请您使用MyEclip ...

  4. java swing 开发 -JTable

    最近利用空闲时间自己琢磨了一下java swing 编程,其实在从事javaweb之前我一直向往的就是java swing 开发,不知道为什么可能当时觉得Windows上的exe程序很是神奇,关于wi ...

  5. Java Swing快速构建窗体应用程序

    以前接触java感觉其在桌面开发上,总是不太方便,没有一个好的拖拽界面布局工具,可以快速构建窗体. 最近学习了一下NetBeans IDE 8.1,感觉其窗体设计工具还是很不错的 , 就尝试一下做了一 ...

  6. 解决 GTK+/GNOME 3 环境下 Java Swing 程序使用本地 GTK+ 主题时菜单无边框 bug 的方法

    在 GTK+/GNOME 3 环境下采用默认的 Adwaita 主题时,Java Swing 程序如果使用本地 GTK+ 主题会出现菜单无边框的 bug,这个问题也可能在其他常用的 GTK+ 主题中出 ...

  7. Java Swing 第01记 Hello Word

    首先来一个Java Swing的HelloWord程序. package cn.java.swing.chapter03; import javax.swing.JButton; import jav ...

  8. Java swing项目-图书管理系统(swing+mysql+jdbc) 总结

    (一)java Swing的学习. (1)学习如何安装windowbuilder插件的安装. <1>在eclipse中点击help <2>在help的下拉选中选择install ...

  9. Java Swing的进化

    摘 要:Swing已是一个比较老的工具集了,在美观的用户界面出来之前需要开发很长时间.它缺少一些你在开发富UI时所需的组件.幸运地是,像 Substance,SwingX及Java Look-and_ ...

随机推荐

  1. Django 学习笔记

    day 1 : 一.web 框架本质: 1.http 建立在tcp 之上:一次互通后断开,无状态,短链接 请求头: b'GET / HTTP/1.1 Host: 127.0.0.1:8080 Conn ...

  2. 修长城 (区间DP)

    Time Limit: 1000 ms   Memory Limit: 256 MB Description 大家都知道,长城在自然条件下会被侵蚀,因此,我们需要修复.现在是21世纪,修复长城的事情当 ...

  3. easywechat之微信支付--在thinkPHP5中的使用

    1. 准备工作 1.1 easywechat 安装完成 未安装移步至 -> http://www.cnblogs.com/flyphper/p/8484600.html 1.2 确定支付相关的配 ...

  4. Eclipse远程调试hadoop源码

    1. 修改对应调试端口 之前的一篇blog里讲述了hadoop单机版调试的方法,那种调试只限于单机运行hadoop命令而已,对于运行整个hadoop环境而言是不可取的,因为hadoop会开启多个jav ...

  5. 从零开始学习前端JAVASCRIPT — 12、JavaScript面向对象编程

    一.构造函数的使用 <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...

  6. Android 网络之 Volley+OkHttp+Https

    Volley 已经发布很长时间了, 也已被广泛应用, 相关教程到处都是. 本文只说两个值得注意的地方. 本文讲解部分比较少, 请参阅提供的相关链接. 完整的实现代码在 Github dodocat/A ...

  7. OkHttp使用教程——网络操作之OkHttp, Volley以及Gson

    写这篇文章的动机 在安卓项目中有一个问题可能无法避免:网络.不管你是加载图片,请求API数据还是从因特网上获得一个字节,你都是在使用网络. 鉴于网络在安卓中的重要性与基础性,当今安卓开发者面临的问题之 ...

  8. 关于用wubi安装Ubuntu,总是提示“没有定义根文件系统”的问题

    用diskgenius测试一下分区问题,就发现一些错误,所以怀疑可能就是因为这个分区参数错误导致WUBI安装不成功,费了大力气转移数据后,重新对硬盘分区,这里称赞一下diskgenius,的确不错,当 ...

  9. 一些常用的api接口、

    taobao ip地址的api http://ip.taobao.com/service/getIpInfo.php?ip=IP 返回参数 code 状态码 data 数据信息 country 国家  ...

  10. 芝麻HTTP:redis-py的安装

    对于Redis来说,我们要使用redis-py库来与其交互,这里就来介绍一下它的安装方法. 1. 相关链接 GitHub:https://github.com/andymccurdy/redis-py ...