Actualisation de la couleur d'arrière-plan d'une ligne dans JTable
Problème :
Lors de la tentative d'actualisation de la couleur d'arrière-plan d'une ligne dans une JTable, cela ne fonctionne qu'à la première itération et échoue par la suite.
Solution :
Le problème se pose car la méthode setRowColor de la classe ColorTable ne réinitialise pas la couleur d'arrière-plan des lignes suivantes. Pour résoudre ce problème, le code doit être modifié comme suit :
public void resetColor(Color color) { for (int i = 0; i < this.getRowCount(); i++) { // Reset all rows to the specified color this.setRowColor(i, color); } }
De plus, pour éviter que les lignes sélectionnées ne soient colorées, la ligne suivante doit être ajoutée au sein de la méthode prepareRenderer :
if (rowSelection != null && isRowSelected(row)) { continue; }
Cela garantit que les lignes sélectionnées conservent leur couleur d'arrière-plan par défaut.
Exemple Code :
// Import necessary libraries... public class ColorTable extends JTable { private static final long serialVersionUID = 1L; private Map rowColor = new HashMap(); private Map columnColor = new HashMap(); private Color cellColor; private Color defaultColor; public ColorTable(TableModel model) { super(model); } public void setRowColor(int row, Color c) { rowColor.put(new Integer(row), c); } // ... Other methods remain the same ... @Override public Component prepareRenderer(TableCellRenderer renderer, int row, int column) { Component c = super.prepareRenderer(renderer, row, column); if (defaultColor == null) { defaultColor = c.getBackground(); } // Color order is as follows: // rowSelection, checkBox toggle for row color, column color, cell color if (rowSelection != null && isRowSelected(row)) { continue; } // ... return c; } // ... Other methods remain the same ... } // ... Other code remains the same ...
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!