Publié le 27/08/2013
Auteur Axel
Réseaux sociaux
0 partages
0 tweets
0 plus
1 commentaires

Ajouter un lien hypertexte a un JLabel

Comment ouvrir une URL lorsque l'on clique sur un JLabel ? En code HTML, la balise <a> signale au navigateur internet qu'il s'agit d'un lien hypertexte et la nouvelle fenetre s'ouvre automatiquement dans un onglet.

En JAVA, voyons comment ajouter les comportements suivants:
1. sousligner le texte au survol de la souris,
2. changer le curseur de la souris,
3. ouvrir l'url dans un navigateur internet.

Ajouter des evenements au JLabel

L'idéal serait d'étendre un composant JLabel et d'y ajouter les fonctionnalités d'un lien hypertexte. Pour simplifier, l'exemple se base sur un JFrame et la création d'un JLabel ayant les propriétés d'un lien. Ainsi, il suffit de lancer la class pour visualiser l'effet de survol et l'ouverture de l'URL dans un navigateur internet.
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.URI;
import java.net.URISyntaxException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
 
/**
 * Ajouter un lien hypertexte à un JLabel
 * 
 * @author Axel 2013
 * @see http://www.fobec.com/java/1131/ajouter-lien-hypertexte-jlabel.html
 */
public class JLabelHyperlink extends JFrame {
 
    /**
     * Constructor
     */
    public JLabelHyperlink() {
        //JFrame
        this.setTitle("Exemple de lien hypertexte");
        this.setSize(300, 100);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setLocationRelativeTo(null);
 
        //JLabel
        JLabel lb_url = new JLabel();
        lb_url.setText("http://www.fobec.com");
        lb_url.setCursor(new Cursor(Cursor.HAND_CURSOR));
        addListener(lb_url);
        JPanel panel = new JPanel();
        panel.add(lb_url);
        getContentPane().add(panel);
    }    
 
    /**
     * Listener sur le JLabel 
     * @param lb_url 
     */
    private void addListener(JLabel lb_url) {
        lb_url.addMouseListener(new MouseAdapter() {
            //Click sur le lien
            public void mouseClicked(MouseEvent e) {
                JLabel label=(JLabel)e.getSource();
                String plainText = label.getText().replaceAll("\<.*?\>", "");
                try {
                    Desktop.getDesktop().browse(new URI(plainText));
                } catch (URISyntaxException ex) {
                    Logger.getLogger(JLabelHyperlink.class.getName()).log(Level.SEVERE, null, ex);
                } catch (IOException ex) {
                    Logger.getLogger(JLabelHyperlink.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
 
            //Survol sur le lien
            public void mouseEntered(MouseEvent e) {
                JLabel label=(JLabel)e.getSource();
                String plainText = label.getText().replaceAll("\<.*?\>", "");
                //Sousligner le texte 
                String urlText="<html><u>"+plainText+"</u></html>";
                label.setText(urlText);
            }
 
            //Quitte la zone du lien    
            public void mouseExited(MouseEvent e) {
                JLabel label=(JLabel)e.getSource();
                String plainText = label.getText().replaceAll("\<.*?\>", "");
                //Texte sans souslignage
                String urlText="<html>"+plainText+"</html>";
                label.setText(urlText);
            }
        });
    }  
 
    /**
     * Exemple
     * @param args 
     */
 
    public static void main(String args[]) {
        JLabelHyperlink jLabelHyperlink = new JLabelHyperlink();
        jLabelHyperlink.setVisible(true);
    }
}
note:
L'utilisation de replaceAll("\<.*?\>", "") est une bidouille pour retirer les balises HTML du texte.

Quand utiliser un lien hypertexte dans un JLabel

En premier lieu bien sur, l'utilisateur peut ouvrir un lien à partir d'un JLabel, par exemple, lorsque l'on veut rediriger vers son site internet. Deuxièmement, on peut aussi s'en servir pour envoyer un email. Au lieu d'utiliser une url, on peut se servir de la commande mailto pour ouvrir le logiciel de messagerie par défaut.

Ajouter un commentaire

Les champs marqués d'un * sont obligatoires, les adresses emails se sont pas publiées.
avatar Juslin

Publié par Juslin

le 30/12/2016 à 09:01:49

Ca tombe bien et merci.

A lire aussi

Réseaux sociaux
Présentation de l'article
Catégorie
java - sources
Mise a jour
27/08/2013
Visualisation
vu 6612 fois
Public
Internaute
Auteur de la publication
Axel
Membre junior
Auteur de 51 articles
|BIO_PSEUDO|
Commentaires récents

Publié par Etiazam dans php5

Si je peux me permettre, il manque l'incrementation dans les deux boucles, telles qu'elles sont presentees elles font tourner le navigateur en rond, il faut donc ajouter
for ($x=0;$x<50;$x...

Publié par Daxentuut dans java

Avec les imports c'est mieux :

import java.awt.AWTException
import java.awt.Robot
import java.awt.event.KeyEvent
import java.io.IOException
import java.util.logging.Level
import...

Publié par inf0mag dans news

Et avec les objets connectes, a va encore exploser !

Publié par Patrice dans tuto

Bonjour

je cherche a activer mod_headers chez 1and1, impossible de mettre mes jpg en cache, auriez vous une piste ? merci !

Publié par mohamed dans php5

code comment publier tous les ficher en php5 et html5