Comment créer un lien hypertexte en Java Swing

Dans ce tutoriel nous allons découvrir comment créer un lien hypertexte en utilisant le composant JLabel, car Swing n’a pas de composants intégrés pouvant afficher des liens hypertexte.

Tout d’abord, créez un JLabel comme d’habitude comme ceci:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
JLabel lien = new JLabel("www.waytolearnx.com");
JLabel lien = new JLabel("www.waytolearnx.com");
JLabel lien = new JLabel("www.waytolearnx.com");

Définissez la couleur de votre texte comme un lien hypertexte standard (bleu):

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
lien.setForeground(Color.BLUE.darker());
lien.setForeground(Color.BLUE.darker());
lien.setForeground(Color.BLUE.darker());

Pour que le curseur de la souris se transforme en une icône de « Poignée De Main » lorsque l’utilisateur déplace la souris sur l’étiquette, mettez son curseur comme suit:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
lien.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
lien.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
lien.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));

 
 
Et pour rendre l’étiquette cliquable, ajoutez un listener de souris au JLabel:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
lien.addMouseListener(new MouseAdapter()
{
@Override
public void mouseClicked(MouseEvent e) {
// l'utilisateur a cliqué sur l'étiquette
}
@Override
public void mouseEntered(MouseEvent e) {
// la souris est entrée dans l'étiquette
}
@Override
public void mouseExited(MouseEvent e) {
// la souris a quitté l'étiquette
}
});
lien.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { // l'utilisateur a cliqué sur l'étiquette } @Override public void mouseEntered(MouseEvent e) { // la souris est entrée dans l'étiquette } @Override public void mouseExited(MouseEvent e) { // la souris a quitté l'étiquette } });
lien.addMouseListener(new MouseAdapter() 
{ 
    @Override
    public void mouseClicked(MouseEvent e) {
        // l'utilisateur a cliqué sur l'étiquette
    }
 
    @Override
    public void mouseEntered(MouseEvent e) {
        // la souris est entrée dans l'étiquette
    }
 
    @Override
    public void mouseExited(MouseEvent e) {
        // la souris a quitté l'étiquette
    }
});

Nous redéfinissons la méthode mouseClicked() pour gérer l’événement dans lequel l’utilisateur clique sur le lien hypertexte. Et dans cette méthode, nous pouvons utiliser la classe Desktop pour ouvrir le lien hypertexte associé, par exemple:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
@Override
public void mouseClicked(MouseEvent e) {
try
{
Desktop.getDesktop().browse(new URI("https://waytolearnx.com/"));
}
catch (URISyntaxException e)
{
e.printStackTrace();
}
}
@Override public void mouseClicked(MouseEvent e) { try { Desktop.getDesktop().browse(new URI("https://waytolearnx.com/")); } catch (URISyntaxException e) { e.printStackTrace(); } }
@Override
public void mouseClicked(MouseEvent e) {
    try
    {
        Desktop.getDesktop().browse(new URI("https://waytolearnx.com/"));
    } 
    catch (URISyntaxException e) 
    {
        e.printStackTrace();
    }
}

Le système d’exploitation ouvrira un programme approprié qui s’associe à l’URL, généralement un navigateur si le lien est une URL d’un site Web.

Pour souligner le texte lorsque l’utilisateur déplace la souris sur le lien, nous pouvons définir le code HTML du texte avec la balise <a>. Vous pouvez donc redéfinir la méthode mouseEntered() comme ceci:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
lien.setText("<a href="#">www.waytolearnx.com</a>");
lien.setText("<a href="#">www.waytolearnx.com</a>");
lien.setText("www.waytolearnx.com");

Et lorsque la souris est sortie, remettez le texte à l’original:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
lien.setText("www.waytolearnx.com");
lien.setText("www.waytolearnx.com");
lien.setText("www.waytolearnx.com");

 
 

Exemple complet:
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.net.*;
public class Link extends JFrame
{
private String str = "www.waytolearnx.com";
private JLabel lien = new JLabel(str);
public Link() throws HeadlessException
{
super();
setTitle("www.waytolearnx.com");
lien.setForeground(Color.BLUE.darker());
lien.setCursor(new Cursor(Cursor.HAND_CURSOR));
lien.addMouseListener(new MouseAdapter()
{
@Override
public void mouseClicked(MouseEvent e) {
try
{
Desktop.getDesktop().browse(new URI("https://waytolearnx.com/"));
}
catch (IOException | URISyntaxException e1)
{
e1.printStackTrace();
}
}
@Override
public void mouseExited(MouseEvent e) {
lien.setText(str);
}
@Override
public void mouseEntered(MouseEvent e) {
lien.setText("<a href="#">" + str + "</a>");
}
});
setLayout(new FlowLayout());
getContentPane().add(lien);
setSize(300, 200);
setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String[] args)
{
SwingUtilities.invokeLater(new Runnable()
{
@Override
public void run()
{
new Link().setVisible(true);;
}
});
}
}
import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.io.*; import java.net.*; public class Link extends JFrame { private String str = "www.waytolearnx.com"; private JLabel lien = new JLabel(str); public Link() throws HeadlessException { super(); setTitle("www.waytolearnx.com"); lien.setForeground(Color.BLUE.darker()); lien.setCursor(new Cursor(Cursor.HAND_CURSOR)); lien.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { try { Desktop.getDesktop().browse(new URI("https://waytolearnx.com/")); } catch (IOException | URISyntaxException e1) { e1.printStackTrace(); } } @Override public void mouseExited(MouseEvent e) { lien.setText(str); } @Override public void mouseEntered(MouseEvent e) { lien.setText("<a href="#">" + str + "</a>"); } }); setLayout(new FlowLayout()); getContentPane().add(lien); setSize(300, 200); setLocationRelativeTo(null); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { @Override public void run() { new Link().setVisible(true);; } }); } }
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.net.*;

public class Link extends JFrame 
{
    private String str = "www.waytolearnx.com";
    private JLabel lien = new JLabel(str);
 
    public Link() throws HeadlessException 
    {
        super();
        setTitle("www.waytolearnx.com");
 
        lien.setForeground(Color.BLUE.darker());
        lien.setCursor(new Cursor(Cursor.HAND_CURSOR));
 
        lien.addMouseListener(new MouseAdapter() 
        {
            @Override
            public void mouseClicked(MouseEvent e) {
                try 
                {
                    Desktop.getDesktop().browse(new URI("https://waytolearnx.com/"));
                } 
                catch (IOException | URISyntaxException e1) 
                {
                    e1.printStackTrace();
                }
            }
            @Override
            public void mouseExited(MouseEvent e) {
                lien.setText(str);
            }
            @Override
            public void mouseEntered(MouseEvent e) {
                lien.setText("" + str + "");
            }
        });
 
        setLayout(new FlowLayout());
        getContentPane().add(lien);
 
        setSize(300, 200);
        setLocationRelativeTo(null);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
 
    public static void main(String[] args) 
    {
        SwingUtilities.invokeLater(new Runnable() 
        {
            @Override
            public void run() 
            {
                new Link().setVisible(true);;
            }
        });
    }
}

Sortie:


 

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *