Entête sur plusieurs lignes dans une JTable

Parfois, lorsque vous utilisez JTable pour afficher des données bidimensionnelles, nous devons utiliser une longue chaîne comme titre de colonne. Le problème est que la chaîne peut ne pas tenir dans la colonne car le titre de la colonne est affiché sur une ligne par défaut. En conséquence, la chaîne sera tronquée, ajoutée par trois points, comme le tableau suivant.
 


 
 
Une solution possible consiste à redimensionner la colonne à la taille appropriée afin que le titre de la colonne s’affiche entièrement. Mais cela réduira la taille des autres colonnes. Une autre façon consiste à utiliser la barre de défilement horizontale pour que les utilisateurs puissent voir l’intégralité du tableau en faisant défiler horizontalement. Cependant, certains utilisateurs pourraient ne pas être satisfaits de cela. Pour afficher l’intégralité du titre de la colonne sans avoir à redimensionner la colonne ou à utiliser la barre de défilement horizontale, nous pouvons la rendre sur plusieurs lignes.

Nous pouvons le faire très facilement sans ajouter de code supplémentaire. Swing nous permet d’utiliser HTML dans plusieurs composants Swing. Pour faire cela, ajoutez simplement la balise <html> et nous pouvons commencer à utiliser diverses balises HTML. Par exemple, pour créer un entête sur plusieurs lignes , nous pouvons utiliser la balise <br> pour créer une nouvelle ligne:

table.getColumn(1).setHeaderValue("<html>Heure<br>Supplémentaire<br>de l'employé</html>");

La hauteur de l’en-tête du tableau sera automatiquement augmentée, nous n’avons donc pas à le faire à la main. Voici le résultat:
 


 
En plus, il est également possible d’utiliser d’autres balises HTML pour formater notre texte, comme ceci:

table.getColumn(1).setHeaderValue("<html><center>Heure<br>Supplémentaire<br><i>de</i> l'employé</center></html>");

 
 

Exemple Complet:
import javax.swing.*;
import java.awt.*;
 
public class Main {
    public static void main(String[] args) {
        //crée un frame
        final JFrame frame = new JFrame("Exemple de JTable");
 
        //En-têtes pour JTable 
        String[] columns = new String[] {
            "<html><center>Id de<br>l'employe</center></html>",
            "<html><center>Nom de<br>de l'employe</center></html>", 
            "<html><center>Adresse de<br>de l'employe</center></html>", 
            "<html><center>Taux horaire<br>de l'employe</center></html>", 
            "<html><center>A temps<br> partiel</center></html>"
        };

        //données pour JTable dans un tableau 2D
        Object[][] data = new Object[][] {
            {1, "Thomas", "Paris", 20.0, true },
            {2, "Jean", "Marseille", 50.0, false },
            {3, "Yohan", "Lyon", 30.0, true },
            {4, "Emily", "Toulouse", 60.0, false },
            {5, "Alex", "Nice", 10.0, false },
        };
 
        //crée un JTable avec des données
        JTable table = new JTable(data, columns);
		
        JScrollPane scroll = new JScrollPane(table);
        table.setFillsViewportHeight(true);
		
        //ajouter la table au frame
        frame.getContentPane().add(scroll);
 
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(400, 180);
        frame.setVisible(true);
    }
}

Sortie:
 


 
Partagez cet article

Laisser un commentaire

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