zoukankan      html  css  js  c++  java
  • Java Swing应用程序JLable超链接

    在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())直到找到待关闭的窗体即可;

  • 相关阅读:
    unreal-python-howtos
    vscode plugin development
    [uva] 1671 History of Languages
    [codeup] 1128 出租车费
    [codeup] 1126 看电视
    Ubuntu 16.04 + ROS Kinetic 机器人操作系统学习镜像分享与使用安装说明
    (二)ROS系统架构及概念 ROS Architecture and Concepts 以Kinetic为主更新 附课件PPT
    ROS新功能包PlotJuggler绘图
    Winform DevExpress控件库(三) 使用NavBarControl控件定制导航栏
    数据意识崛起,从企业应用看BI软件的未来发展
  • 原文地址:https://www.cnblogs.com/kingkangstudy/p/6722583.html
Copyright © 2011-2022 走看看