Afficher des données tabulaires avec Swing


Composant JTable (1)

Afficher un tableau de données alphanumériques

Présente le composant Swing JTable à travers un exemple de l’affichage de données tabulaires.

Swing propose un composant permettant de gérer des données sous forme de tableau. Il s’agit du JTable. Ce dernier disposant de nombreuses fonctionnalités, il est bon de commencer en douceur par un petit exemple de présentation.


 Présentation

Le composant JTable fait partie des composants Swing complexes car il est capable de répondre à plusieurs types de problèmes d’affichages et d’éditions de données tabulaires. Nous pourrons aussi bien créer des tableaux contenant du texte ou toute sortes d’objets comme des images. Il sera également possible de définir des composants d’édition personnalisés en fonction du type de données comme des cases à cocher pour des données booléennes par exemple.

Nous allons voir dans cet article un exemple très basique d’affichage d’un simple tableau de données alphanumériques. Cela permettra de débuter en douceur avec ce composant.

 Le programme d’affichage du tableau

Le but de ce premier exemple va être d’afficher dans une fenêtre, le contenu d’un tableau en mémoire avec une première ligne contenant les titres de colonnes. Le résultat devra donc ressembler à cela :

Si l’on consulte la javadoc, parmi les constructeurs disponibles, nous en voyons un qui attend justement deux paramètres : le premier étant le contenu du tableau à afficher et le second la définition des titres de chaque colonnes.

JTable(Object[][] rowData, Object[] columnNames)

Constructs a JTable to display the values in the two dimensional array, rowData, with column names, columnNames.

Donc il suffit de remplir un tableau à 2 dimensions avec les données à afficher et un second tableau avec les entêtes de colonnes.

Définissons notre squelette de programme avec une classe contenant la fonction main() et nos 2 tableaux.

  1. public class Main
  2. {
  3.   public static void main( String[] args )
  4.   {
  5.  
  6.   }
  7.   private final static Object[][] DATA = {  
  8.     { "Handel", "George Frideric",      1685, 1759 },
  9.     { "Dvorak", "Anton", 1841, 1904 },
  10.     { "Prokofiev", "Serge", 1891, 1953 },
  11.     { "Berg", "Alban", 1885, 1935 },
  12.     { "Rachmaninov", "Serge", 1873, 1943 },
  13.     { "Mahler", "Gustav",       1860, 1911 },
  14.     { "Bruckner", "Anton", 1824, 1896 },
  15.     { "Corelli", "Arcangelo", 1653, 1713 },
  16.     { "Chabrier", "Emmanuel", 1841, 1894 },
  17.     { "Chopin", "Frédéric", 1810, 1849 },
  18.     { "Copland", "Aaron", 1900, 1990 },
  19.     { "Couperin", "Louis", 1626, 1661 },
  20.     { "Rameau", "Jean-Philippe", 1683, 1764 },
  21.     { "Gershwin", "George", 1898, 1937 },
  22.     { "Debussy", "Claude", 1862, 1918 },
  23.     { "Britten", "Benjamin", 1913, 1976 },
  24.     { "Bach", "Johann Sebastian",       1685, 1750 },
  25.     { "Beethoven", "Ludwig van", 1770, 1827 }
  26.   };
  27.         private final static String[] TITRES = { "Nom", "Prénom", "Naissance", "Décé" };
  28. }

Télécharger

Ajoutons dans la fonction main(), la définition de la fenêtre chargée d’afficher le tableau.

  1. JFrame mainFrame = new JFrame( "JTable: Exemple 0" );
  2. mainFrame.add( new JTable( DATA, TITRES ), BorderLayout.CENTER );
  3. mainFrame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
  4. mainFrame.setSize( 500, 250 );
  5. mainFrame.setLocationRelativeTo( null );
  6. mainFrame.setVisible( true );

Télécharger

Ce code se contente de définir une JFrame dans laquelle nous créons dans la partie centrale le JTable.

Les lignes suivantes permettent simplement de préciser que :

  • lorsque l’on referme la fenêtre, on stoppe l’application
  • que l’on définie une taille de 500x250 pixels
  • que nous affichons la fenêtre au centre de l’écran
  • que nous rendons visible (affichage) la fenêtre

En exécutant le programme, nous avons le résultat suivant :

Nous voyons bien le contenu du tableau s’afficher mais il manque l’affichage des titres de colonnes et il n’y a pas de scrollbar pour faire défiler les lignes non visibles. Il suffit pour résoudre ces 2 problèmes, d’intégrer le JTable dans un composant JScrollPane.

Il suffit de modifier la ligne :

  1. mainFrame.add( new JScrollPane( new JTable( DATA, TITRES ) ), BorderLayout.CENTER );

En exécutant à nouveau le programme :

Nous avons bien réalisé, en quelques lignes un programme capable de visualiser et éditer un tableau de cellules contenant du texte. Bien sur, dans cet exemple, rien n’est prévu pour sauvegarder les modifications.

 Conclusion

Nous avons vu, à travers cet exemple les bases du composant JTable. Ce n’est malheureusement pas suffisant pour exploiter ce dernier dans une véritable application. Par défaut, le JTable utilise pour des raisons historiques des Vector pour gérer les données en mémoire. Cette méthode n’est pas forcément la mieux adaptée en fonction du type de données à afficher. Nous pourrions avoir besoin d’afficher des données issues d’un ArrayList, d’une base de données ou encore afficher des données calculées. Pour cela, nous devrons passer par un objet intermédiaire : le TableModel. Ce sera le sujet d’un prochain article.


Article n° 113

Crée par: chris

Créé le: 19 juin 2018

Modifié le: 28 juin 2018

Nombre de visites: 304

Popularité: 22 %

Popularité absolue: 1

Mots clés de cet article


SPIP

2003-2023 LePpf
Plan du site | | Contact | RSS 2.0 | Sur YouTube

Visiteurs connectés : 0

Nombre moyen de visites quotidiennes sur le site: 184