Modfier la couleur d'une ligne dans jtable selon la condition if.
Joaquin
-
KX Messages postés 19031 Statut Modérateur -
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.
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
-
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. -
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; }-
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 ?- 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); } }
-