Aprende Java Aprende Php Aprende C++ Aprende HTML 5 Aprende JavaScript Aprende JSON Aprende MySQL Aprende SQLServer Aprende Visual Basic 6 Aprende PostgreSQL Aprende SQLite Aprende Redis Aprende Kotlin Aprende XML Aprende Linux VSC Aprende Wordpress Aprende Laravel Aprende VueJS Aprende JQuery Aprende Bootstrap Aprende Netbeans Aprende Android
Sigueme en Facebook Sigueme en Twitter Sigueme en Instagram Sigueme en Youtube Sigueme en TikTok Sigueme en Whatsapp
Home / Componentes / Java / Abrir enlace web desde JLabel con Java

Abrir enlace web desde JLabel con Java

Por jc mouse jueves, julio 19, 2012

El siguiente código te permite abrir enlaces web desde un JLabel, ademas aprovechando el soporte a etiquetas HTML del componente swing, se utiliza estilos CSS para dar algunos efectos a los enlaces cuando el mouse pase sobre el texto, cuando se realice un click sobre nuestro label, se abrirá la dirección URL que le indiquemos en el navegador predefinido del sistema, si no puede abrir el link, muestra un mensaje de error.

hyperlink

La clase que hace todo lo anteriormente descrito se llamada «JLabelLink.java» y el código es:

import java.awt.Cursor;
import java.awt.Desktop;
import java.awt.Dimension;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
import javax.swing.JLabel;
/**
 * @web https://www.jc-mouse.net
 * @author Mouse
 */
public class JLabelLink extends JLabel{

    private String text="";
    private String TextLink=null;
    private URI uri;

    public JLabelLink(){
        super();
        this.setCursor(Cursor.getPredefinedCursor( Cursor.HAND_CURSOR ));
        this.setPreferredSize( new Dimension(34,14) );
        this.setVisible(true);
        //Eventos del raton sobre el JLabel
        addMouseListener(new MouseAdapter() {
            @Override
                public void mouseClicked(MouseEvent e) {
                    Abrir_URL(uri);
                }
            @Override
                public void mouseEntered(MouseEvent e) {
                    setText(text,false);
                }
            @Override
                public void mouseExited(MouseEvent e) {
                    setText(text,true); repaint();
                }
        });

    }

    /**
 * Coloca la dirección web
 */
    public void setLink( String link )
    {        
        try {
            uri = new URI(link);
        } catch (URISyntaxException e) {
            throw new RuntimeException(e);
        }
    }

    /**
 * Coloca el texto que contiene el enlace web
 */
    public void setTextLink( String texto )
    {
        this.TextLink = texto;
    }

    /**
 * Se sobreescribe metodo
 */
    @Override
    public void setText( String value ){                
        setText(  value ,false );
    }

    /**
 * Retorna el texto sin las etiquetas HTML
 */
    public String getTextSinFormato(){
        return text;
    }

    /**
 * Da formato al texto para añadir las etiquetas HTML necesarias
 */
    private void setText(String text, boolean inout){
        //Estilo CSS
        String css = "<style type='text/css'>"
                + ".link {text-decoration: none;font-weight: bold;color:#000000;}"
                + ".link_hover{color:rgb(255,0,0);text-decoration:underline;}"
                + "</style>";

        //estilo css segun el mouse este dentro o fuera
        String clase = (inout)? "link":"link_hover";
        //forma el texto HTML
        String html_text = (TextLink!=null)?text.replace(TextLink, "<span class='"+clase+"' >" +TextLink + "</span>"):text;        
        //coloca al padre
        super.setText("<html>"+ css +"<span>"+ html_text + "<span/></html>");

        this.text = text;
    }

    /**
 * Abre enlace web en el navegador
 */
    private void Abrir_URL(URI uri) {
      if (Desktop.isDesktopSupported()) {
          Desktop desktop = Desktop.getDesktop();
          try {
             desktop.browse(uri);
          } catch (IOException e) {
             System.err.println("Error: No se pudo abrir el enlace" + e.getMessage() );
          }
      } else {
          System.err.println("Error: Error de compatibilidad en la plataforma actual. No se puede abrir enlaces web.");
      }
    }

}

Para implementar este JLabel personalizado debemos hacer lo siguiente, creamos una nueva instancia de clase, le damos un tamaño al componente y le agregamos un texto, seguidamente le añadimos el enlace web y opcionalmente, le añadimos la palabra o palabras que aparecerán subrayadas y de un color rojo cuando el puntero del mouse entre dentro el jlabel.

JLabelLink link = new JLabelLink();
link.setSize( 300,120);
link.setText("La vida real no se divide en semestres, la vida real no tendrá largas vacaciones de verano, "
         + "de pascua, de navidad, del patrón del colegio, puentes, etc. en la vida real pocos jefes se "
         + "interesarán en ayudarte a que te encuentres a ti mismo. En la vida real todo eso tendrás que hacerlo "
         + "en tu tiempo libre.");
link.setLink("http://www.google.com.bo");
link.setTextLink("vida real");        
this.add(link);

Para este ejemplo hago uso de una frase de Bill Gates, modificada solo para fines didacticos, la frase original es:

La vida real no se divide en semestres, no tendrá largas vacaciones de verano, de pascua, de navidad, del patrón del colegio, puentes,etc. y pocos jefes se interesarán en ayudarte a que te encuentres a ti mismo. Todo eso tendrás que hacerlo en tu tiempo libre.

Bájate el proyecto del ejemplo en netbeans 6.9

Código Fuente

 Enjoy!!!

Tags

Artículos similares

JSpinner: Cambiar color de fondo y fuente

Un JSpinner es un componente swing de java con una caja de texto y un par de botones que nos permiten incrementar  y dec[...]

Primeros pasos con Vue CLI: Crea tu Entorno de Trabajo

En un post anterior [Introducción a VueJS framework para el desarrollo FrontEnd] realizamos una breve introducción a Vue[...]

Leer archivos de texto

En este tutorial de android, vemos como leer un archivo de texto y mostrarlo en pantalla del celular, el texto elegido e[...]

Crea presentaciones Power Point desde Java

Apache POI es la API de Java para el trabajo con archivos de Microsoft como son Word, Excel y Power Point. Apache POI se[...]

Bloquear orientación de la pantalla

Cuando escribimos aplicaciones para android debemos tener cuidado al diseñar la interfaz en la posición que tomaran los[...]

Renombrar atributos JSON con GSON

Si quieres cambiar el nombre de tus atributos sin tener que reescribir código java por X o Y razón, GSON te permite reno[...]