A voir également:
- Modfier la couleur d'une ligne dans jtable selon la condition if.
- Excel cellule couleur si condition texte - Guide
- Aller à la ligne excel - Guide
- La boite a couleur - Télécharger - Divers Photo & Graphisme
- Partager photos en ligne - Guide
- Changer la couleur de la barre des taches - Guide
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.
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)
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; }
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); } }
Tu peux par exemple faire une classe en redéfinissant la méthode comme je l'ai montré.
Puis tu remplaces le JTable de ton affichage par un MaTable, et c'est tout.