Masquer une colonne d’une JTable – Java

JTable est un composant Swing flexible qui est très bien adapté pour afficher des données dans un format tabulaire. Dans ce tutoriel, vous apprendrez quelques techniques pour masquer une colonne d’une JTable ou bien pour rendre une colonne dans une JTable invisible.
 
 
Dans l’exemple ci-dessous, nous avons trois colonne « Nom, adresse, ID » dans JTable, et nous avons caché la dernière colonne « ID ». Dans la console on récupère les données cachées en utilisant le TableModel.


 

Méthode 1 :

Vous pouvez utiliser la méthode removeColumn().
 
Syntaxe:

removeColumn( TableColumn tcol)

Cette méthode est utilisée pour supprimer une colonne de JTable. Il prend un objet de TableColumn qui représente tous les attributs d’une colonne dans un JTable. tcol: Il indique la TableColumn qui sera supprimée.
 

Exemple:
//supprimer la deuxiéme colonne
table.removeColumn(table.getColumnModel().getColumn(1));

Pour récupérez les données du modèle:

table.getModel().getValueAt(table.getSelectedRow(),1);

Une chose à noter est que lors de la récupération des données, elles doivent être extraites du modèle et non de la table.
 
 

Méthode 2 :

Vous pouvez définir la largeur de la colonne sur 0, pour qu’il soit invisible, pour cela nous allons utiliser les méthodes suivantes.

  • setMinWidth()
  • setMaxWidth()
  • setWidth()

 

Exemple:
table.getColumnModel().getColumn(4).setMinWidth(0);
table.getColumnModel().getColumn(4).setMaxWidth(0);
table.getColumnModel().getColumn(4).setWidth(0);

 

Méthode 3 :

Pour masquer une colonne (ou plus) dans une JTable, ne donnez pas le nom de colonne. Pour récupérer les données cachées, vous devez utiliser le TableModel.
 
 

Exemple:
import javax.swing.*;
import java.awt.*;
import javax.swing.table.*;
import javax.swing.event.*;
import java.awt.event.*;


public class HideColumnJTable implements ListSelectionListener 
{
	JTable table;
	  
	public HideColumnJTable() 
	{
		JFrame f = new JFrame("Masquer une colonne de JTable");

		// Nous spécifions seulement 2 colonnes, le dernier "ID" est caché 
		String[] columns = new String[] {
		      "Nom", 
		      "Adresse", 
		};

		Object[][] data = new Object[][] {
		      {"Thomas", "Paris", 1 },
		      {"Jean", "Marseille", 2 },
		      {"Yohan", "Lyon", 3 },
		      {"Emily", "Toulouse", 4 },
		      {"Alex", "Nice", 5 },
		};
		
		TableModel model = new AbstractTableModel() 
		{
			public int getColumnCount() { 
				return columns.length; 
			}
			
			public int getRowCount() { 
				return data.length;
			}
			
			public Object getValueAt(int row, int col) {
				return data[row][col];
			}
			
			public String getColumnName(int column) {
				return columns[column];
			}
			
			public Class getColumnClass(int col) {
				return getValueAt(0,col).getClass();
			}
			
			public void setValueAt(Object aValue, int row, int column) {
				data[row][column] = aValue;
			}
		};

		table = new JTable(model);

		ListSelectionModel listModel = table.getSelectionModel();
		listModel.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
		listModel.addListSelectionListener(this);

		JScrollPane scroll = new JScrollPane(table);
		scroll.setPreferredSize(new Dimension(300, 300));
		f.getContentPane().add(scroll);
		f.setSize(200, 180);
		f.setVisible(true);
	}

	public void valueChanged(ListSelectionEvent e) {
		int[] sel;
		Object value;

		if (!e.getValueIsAdjusting()) 
		{
			sel = table.getSelectedRows();

			if (sel.length > 0) 
			{
				for (int i=0; i < 3; i++) {
					// récupérer les données de la table
					TableModel tm = table.getModel();
					value = tm.getValueAt(sel[0],i);
					System.out.print(value + " ");
				}
				System.out.println();
			}
		}
	}

	public static void main(String[] args) {
		new HideColumnJTable();
	}
}

Sortie:


 

Laisser un commentaire

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