Home / Programmazione / Java / Righe JTable a colori alternati
Mattepuffo

Righe JTable a colori alternati

Righe JTable a colori alternati

Come detto più volte, JTable è uno dei componenti più potenti e flessibili di Swing.

Oggi vediamo come fare per ottenere le righe a colori alterni, cosa molto comoda quando si hanno parecchie righe.

Per farlo dobbiamo definire uno nostro TableCellRenderer che estende il DefaultTableCellRenderer.

Dopo di che dobbiamo impostarlo come predefinito per la nostra JTable.

 

Quindi questa la nostra classe:

import java.awt.Color;
import java.awt.Component;
import javax.swing.JTable;
import javax.swing.table.DefaultTableCellRenderer;

public class AlternateRowsColor extends DefaultTableCellRenderer {

    private Color currentColor = Color.white;

    public AlternateRowsColor() {
        setOpaque(true);
    }

    @Override
    public Component getTableCellRendererComponent(JTable table, Object value, boolean selected, boolean focused, int row, int col) {
        if (row % 2 == 0) {
            currentColor = Color.white;
        } else {
            currentColor = new Color(222, 222, 225);
        }
        if (selected) {
            super.setForeground(table.getSelectionForeground());
            super.setBackground(table.getSelectionBackground());
        } else {
            super.setForeground(Color.black);
            super.setBackground(currentColor);
        }
        setFont(table.getFont());
        setValue(value);
        return this;
    }
}

Come vete abbiamo anche fatto il necessario Override del metodo getTableCellRendererComponent().

Se vedete bene il codice non è difficile.

Facciamo una serie di controlli; prima controlliamo se la cella è dispari o pari, e a seconda impostiamo il colore.

Poi facciamo solo un controllo se è selezionata o meno.

Poi per impostare questo come DefaultTableCellRenderer della nostra JTable:

tableData.setModel( model);
tableData.setDefaultRenderer(Object.class, new AlternateRowsColor());

Da mettere dopo la dichiarazione del model (che magari è semplicemente quello di default).

Vi lascio allo studio della documentazione per ulteriori chiarimenti!