Bouton supprimer pour chaque ligne d’un Jtable – Java

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 bouton supprimer pour chaque ligne d’un Jtable dans une cellule 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 javax.swing.*;
import javax.swing.table.*;
import javax.swing.event.CellEditorListener;
import java.awt.Component;
import java.awt.event.*;
import java.util.EventObject;

public class Main 
{
  public static void main(String[] args) 
  {  
    //Header de JTable 
    String[] columns = new String[] {"Id","Nom","Adresse","Taux horaire"," "};

    //données pour JTable dans un tableau 2D
    Object[][] data = new Object[][] {
        {1, "Thomas", "Paris", 20.0, " " },
        {2, "Jean", "Marseille", 50.0, " " },
        {3, "Yohan", "Lyon", 30.0, " " },
        {4, "Emily", "Toulouse", 60.0, " " },
        {5, "Alex", "Nice", 10.0, " " },
    };
    //définir le modéle de JTable
    DefaultTableModel model = new DefaultTableModel(data, columns);
    //crée un JTable avec des données
    JTable table = new JTable(model);

    //définir notre Renderer sur la colonne " "
    table.getColumn(" ").setCellRenderer(new MyRendererAndEditor(table));
    table.getColumn(" ").setCellEditor(new MyRendererAndEditor(table));

    JFrame f = new JFrame();
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    f.getContentPane().add(new JScrollPane(table));
    f.setSize(500, 180);
    f.setVisible(true);
  }
}

class MyRendererAndEditor implements TableCellRenderer, TableCellEditor 
{
  private JButton btn;
  private int row;

  MyRendererAndEditor(JTable table) {
    btn = new JButton("Supprimer");
    btn.addActionListener(new ActionListener() {
      @Override
      public void actionPerformed(ActionEvent e) {
        DefaultTableModel model = (DefaultTableModel) table.getModel();
        model.removeRow(row);
      }
    });
  }

  @Override
  public Component getTableCellRendererComponent(JTable table, Object 
  value, boolean isSelected, boolean hasFocus, int row, int column) 
  {
    return btn;
  }

  @Override
  public Component getTableCellEditorComponent(JTable table, Object 
  value, boolean isSelected, int row, int column) 
  {
    this.row = row;
    return btn;
  }

  @Override
  public Object getCellEditorValue() { return true; }

  @Override
  public boolean isCellEditable(EventObject anEvent) { return true; }

  @Override
  public boolean shouldSelectCell(EventObject anEvent) { return true; }

  @Override
  public boolean stopCellEditing() { return true; }

  @Override
  public void cancelCellEditing() {}

  @Override
  public void addCellEditorListener(CellEditorListener l) {}

  @Override
  public void removeCellEditorListener(CellEditorListener l) {}
}

Sortie:


 

Laisser un commentaire

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