Modfier la couleur d'une ligne dans jtable selon la condition if.

Joaquin -  
KX Messages postés 19031 Statut Modérateur -
Bonjour,

J'aimerai savoir si c'est possible de changer la couleur d'une lignes dans un jtable si elles répondent à certains critères if.

2 réponses

  1. Joaquin
     
    Merci encore KX,

    Est-ce que c'est pareil si mes données du tableau proviennent de mysql ?
    Je suis sur Netbeans et je ne sais pas où placer le code.
    Désolé pour le dérangement.
    1
    1. KX Messages postés 19031 Statut Modérateur 3 020
       
      Peu importe d'où viennent tes données, le code s'écrit au niveau de JTable.

      Tu peux par exemple faire une classe
      MaTable extends JTable
      en redéfinissant la méthode
      prepareRenderer
      comme je l'ai montré.

      Puis tu remplaces le JTable de ton affichage par un MaTable, et c'est tout.
      0
  2. KX Messages postés 19031 Statut Modérateur 3 020
     
    Bonjour,

    Oui c'est possible, par exemple en surchargeant la méthode prepareRenderer de la classe JTable (cf. documentation)
    @Override
    public Component prepareRenderer(TableCellRenderer renderer, int row, int column) {
        Component result = super.prepareRenderer(renderer, row, column);
        // TODO
        return result;
    }
    0
    1. Joaquin
       
      Merci beaucoup pour votre réponse.
      Mais comme je suis débutant en java je ne comprend pas tout encore.
      Supposons que j ai un champ date dans ma table puis que j aimerai mettre en rouge toutes les lignes dont la date dépasse 30 jours. Comment pourrai je faire ?
      0
      1. KX Messages postés 19031 Statut Modérateur 3 020 > Joaquin
         
        Un petit exemple du fonctionnement de prepareRenderer :
        import java.awt.*;
        import javax.swing.*;
        import javax.swing.table.TableCellRenderer;
        import java.time.LocalDate;
        
        public class Test {
            public static void main(String[] args) {
                Object[][] rowData = { //
                        { "Mars", LocalDate.of(2020, 3, 1) }, // Rouge
                        { "Avril", LocalDate.of(2020, 4, 1) }, // Rouge
                        { "Mai", LocalDate.of(2020, 5, 1) }, // Vert
                        { "Juin", LocalDate.of(2020, 6, 1) }, // Vert
                        { "Juillet", LocalDate.of(2020, 7, 1) }, // Rouge
                };
                Object[] columnNames = { "Label", "Date" };
        
                JTable table = new JTable(rowData, columnNames) {
                    @Override
                    public Component prepareRenderer(TableCellRenderer renderer, int row, int column) {
                        Component result = super.prepareRenderer(renderer, row, column);
                        result.setBackground(isGreenRow(row) ? Color.GREEN : Color.RED);
                        return result;
                    }
        
                    private boolean isGreenRow(int row) {
                        LocalDate minimumAllowed = LocalDate.now().minusMonths(1);
                        LocalDate maximumAllowed = LocalDate.now().plusMonths(1);
                        LocalDate date = (LocalDate) getValueAt(row, 1);
                        return date.isAfter(minimumAllowed) && date.isBefore(maximumAllowed);
                    }
                };
        
                JFrame frame = new JFrame();
                frame.add(table, BorderLayout.CENTER);
                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            }
        }
        0