Maison  >  Article  >  Java  >  Comment actualiser la couleur d'arrière-plan d'une ligne dans une JTable ?

Comment actualiser la couleur d'arrière-plan d'une ligne dans une JTable ?

DDD
DDDoriginal
2024-11-22 07:23:11995parcourir

How to Refresh the Background Color of a Row in a JTable?

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 &amp;&amp; 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 &amp;&amp; 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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn