Modfier la couleur d'une ligne dans jtable selon la condition if.
Fermé
Joaquin
-
30 mai 2020 à 04:09
KX Messages postés 16668 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 17 mars 2023 - 31 mai 2020 à 08:13
KX Messages postés 16668 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 17 mars 2023 - 31 mai 2020 à 08:13
A voir également:
- Modfier la couleur d'une ligne dans jtable selon la condition if.
- Aller à la ligne excel - Guide
- Excel condition couleur - Guide
- Retour à la ligne css - Forum CSS
- Copiez la ligne indiquant aux moteurs de recherche de ne pas référencer la page. ✓ - Forum Référencement
- Retour à la ligne google sheet ✓ - Forum Bureautique
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.
KX
Messages postés
16668
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
17 mars 2023
3 005
30 mai 2020 à 12:30
30 mai 2020 à 12:30
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;
}
KX
Messages postés
16668
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
17 mars 2023
3 005
>
Joaquin
30 mai 2020 à 14:39
30 mai 2020 à 14:39
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);
}
}
31 mai 2020 à 08:13
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.