Ajouter un JButton dans une cellule d’un JTable

JTable est une sous-classe de la classe JComponent et elle peut être utilisée pour créer une table avec des informations affichées dans plusieurs lignes et colonnes. Lorsqu’une valeur est sélectionnée dans une table JTable, un événement TableModelEvent est généré, qui est géré en implémentant l’interface TableModelListener. Nous pouvons ajouter ou insérer un JButton dans une cellule JTable en personnalisant le code dans DefaultTableModel ou AbstractTableModel et nous pouvons également personnaliser le code en implémentant l’interface TableCellRenderer et nous devons redéfinir la méthode getTableCellRendererComponent().
 

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

class TestJButton extends JFrame
{
	private JPanel topPanel;
	private JTable table;
	private JScrollPane scrollPane;
	private String[] columns = new String[3];
	private String[][] data = new String[3][3] ;
	JButton button = new JButton();

	public TestJButton()
	{
		setTitle("JButton dans JTable");
		setSize(300,150);
		topPanel = new JPanel();
		topPanel.setLayout(new BorderLayout());
		getContentPane().add(topPanel);
		columns = new String[] {"Id", "Nom", "Action"};

		data = new String[][]{
			{"1","Thomas"},
			{"2","Jean"},
			{"3","Yohan"}
		};

		DefaultTableModel model = new DefaultTableModel(data,columns);
		table = new JTable();
		table.setModel(model);
		table.getColumn("Action").setCellRenderer(new ButtonRenderer());
		table.getColumn("Action").setCellEditor(new ButtonEditor(new JCheckBox()));
		scrollPane = new JScrollPane(table);
		topPanel.add(scrollPane,BorderLayout.CENTER);  
		
		button.addActionListener(
			new ActionListener()
			{
				public void actionPerformed(ActionEvent event)
				{
					JOptionPane.showMessageDialog(null,"Voulez-vous modifier cette ligne?");
				}
			}
		);
	}

	class ButtonRenderer extends JButton implements TableCellRenderer 
	{
		public ButtonRenderer() {
			setOpaque(true);
		}

		public Component getTableCellRendererComponent(JTable table, Object value,
		boolean isSelected, boolean hasFocus, int row, int column) {
			setText((value == null) ? "Modifier" : value.toString());
			return this;
		}
	}

	class ButtonEditor extends DefaultCellEditor 
	{
		private String label;
		
		public ButtonEditor(JCheckBox checkBox)
		{
			super(checkBox);
		}

		public Component getTableCellEditorComponent(JTable table, Object value,
		boolean isSelected, int row, int column) 
		{
			label = (value == null) ? "Modifier" : value.toString();
			button.setText(label);
			return button;
		}

		public Object getCellEditorValue() 
		{
			return new String(label);
		}
	}

	public static void main(String args[])
	{
		TestJButton f = new TestJButton();
		f.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 *