JTable - Bestimmte Zeilen umgestalten

hesk

Erfahrenes Mitglied
Hallo!

Ich möchte einige Zeilen in meiner JTable umgestalten.
Hierfür hab ich einen eigenen TableCellRenderer gemacht und ihn der Table zugewiesen.

Java:
public class ArtkelTableCellRenderer extends DefaultTableCellRenderer 
{
    private static final long serialVersionUID = 7979571000106387348L;

    @Override
    public Component getTableCellRendererComponent( JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column )
    {
        Component cell = super.getTableCellRendererComponent( table, value, isSelected, hasFocus, row, column );
        
        if( !((ArtikelTableModel)table.getModel()).isAktiv( row ))
        {
            System.out.println("asked row " + row);
            cell.setBackground( Color.red );
        }
        else
        {
            return super.getTableCellRendererComponent( table, value, isSelected, hasFocus, row, column );
        }
        
        return cell;
    }
}

Leider wird nun die ganze Tabelle mit background=red gemacht.

Wie kann ich mir quasi die default TableCellRendererComponent holen?
 

hesk

Erfahrenes Mitglied
Gerade gelöst( fürL&F Nimbus )

Java:
if( !((ArtikelTableModel)table.getModel()).isAktiv( row ))
        {
            cell.setBackground( Color.red );
        }
        else
        {
            if( isSelected )
            {
                cell.setBackground( new Color(57,105,138) );
            }
            else
            {
                cell.setBackground( null );
            }
        }
 

hesk

Erfahrenes Mitglied
Hm, jetzt bin ich auf ein anderes Problem gestoßen:

In der Funktion

Java:
@Override
    public Component getTableCellRendererComponent( JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column )
    {

bekomme ich int row übergeben.
Dies ist aber nicht die absolute Row(ohne filter) sondern jene, wo die Reihe steht.

Kann man irgendwie rausfinden welche Row es in dem gesamten Model(ohne filter) ist?
 

hesk

Erfahrenes Mitglied
Die Funktion nach welcher ich gesucht habe:

Java:
table.convertRowIndexToModel(row)

Die korrekte Funktion:

Java:
@Override
    public Component getTableCellRendererComponent( JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column )
    {
        Component cell = super.getTableCellRendererComponent( table, value, isSelected, hasFocus, row, column );
        
        if( !((ArtikelTableModel)table.getModel()).isAktiv( table.convertRowIndexToModel(row) ))
        {
            cell.setFont( new Font("SansSerif", Font.ITALIC, 12) );
            cell.setForeground( Color.red );
        }
        else
        {
            cell.setFont( new Font("SansSerif", Font.PLAIN, 12) );
            cell.setForeground( Color.black );
        }
        
        return cell;
    }