Swing JTableCellRenderer

M

Morgaine21

Gast
Hallo Leute,

ich weiß zu diesem Thema gibt es unglaublich viele Einträge, jedoch hab ich jetzt schon ziemlich viele durch und komme immer noch auf kein Ergebnis.

Nun zu meinem Problem:

Ich möchte die Schriftfarbe der Zellen meiner JTable je nach Text ändern. Hierfür habe ich folgenden Code verfasst:

Java:
public class ScoreTableCellRender extends DefaultTableCellRenderer
 {
    private static final long serialVersionUID = 3503110144069061261L;

    public Component getTableCellRendererComponent(JTable table, Object value,
            boolean isSelected, boolean hasFocus, int row, int column) {
        // TODO Auto-generated method stub
        JLabel c = (JLabel)super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
        String s = value.toString();
        
        if(s.equals("NB")){
            c.setForeground(Color.GRAY);
            c.setText((String) value);
        }
        else if(s.equals("NOK")){
            c.setForeground(Color.ORANGE);
            c.setText((String) value);
        }
        else if(s.equals("NNOK")){
            c.setForeground(Color.RED);
            c.setText((String) value);
        }
        else if(s.equals("OK")){
            c.setForeground(Color.BLACK);
            c.setText((String) value);
        }
        return c;
    }
}

Hier mein Modell:

Java:
public class StatistikTabellenModell extends AbstractTableModel{

    private static final long serialVersionUID = -2712404378541056977L;
    
    private int ColumnCount = 1;
    private int RowCount = 1;
    private String[][] Values;
    
    public StatistikTabellenModell(int c, int r)
    {
        ColumnCount = c;
        RowCount = r + 1;
    }

    public int getColumnCount() {
        // TODO Auto-generated method stub
        return ColumnCount;
    }

    public int getRowCount() {
        // TODO Auto-generated method stub
        return RowCount;
    }

    public Object getValueAt(int rowIndex, int columnIndex) {
        // TODO Auto-generated method stub
        if(Values != null)
            return Values[rowIndex][columnIndex];
        else
            return " ";
    }
    
    public void setColumnCount(int i){
        ColumnCount = i;
        Values = new String[RowCount+1][ColumnCount];
    }
    
    public void setRowCount(int i){
        RowCount = i;
        Values = new String[RowCount+1][ColumnCount];
    }
    
    public void setValue(String[] d, String[][] a)
    {
        Values = new String[RowCount+1][ColumnCount];
        for(int i = 0; i < d.length; i++)
            Values[0][i] = d[i];
        
        for(int i = 0; i < a.length; i++){
            for (int j = 0; j < a[i].length; j++)
                Values[i+1][j] = a[i][j];
        }
    }
}

Und der Teil des Hauptprogramms der relavant ist:

Java:
ScoreTableCellRender str = new ScoreTableCellRender();
TAnzeigeModell2.setValue(ColDate, Values2);
TAnzeige2.setDefaultRenderer(String.class, str);

Ich hoffe wirklich, dass ihr mir helfen könnt und bedanke mich schon mal im Vorraus.

lg
Morgaine
 

Michael...

Top Contributor
Das Problem liegt vermutlich hierin:
Java:
[code=Java]TAnzeige2.setDefaultRenderer(String.class, str);
AbstractTableModel liefert für
Code:
getColumnClass(int columnIndex)
die Klasse von Object, Du sagst aber der Renderer ist nur für Inhalt vom Typ String gültig.
Entweder:
a) die
Code:
public Class getColumnClass(int columnIndex)
von AbstractTableModel so überschreiben, dass für entsprechende Spalten String.class zurückgegeben wird
b) den Renderer für alle Werte vom Typ Object setzen
c) den Renderer direkt auf einzelne TableColumns setzen
 
M

Morgaine21

Gast
Hallo,

ich habe a und bei nacheinander ausprobiert jedoch kann keine Methode geholfen bzw. hat es noch verschlimmert.

a) Ich
Code:
 public Class getColumnClass(int columnIndex)
wie folgt überschrieben:

Java:
@Override
public Class<String> getColumnClass(int columnIndex){
   return String.class;
}

Leider schürtz hier dann das Programm ab, da value = null auftritt. (siehe b)

b) Wenn ich das tue, stürzt das ganze Programm ab, da in
Code:
 public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column)
value auf einmal null ist.

c) Wie mache ich das?
 
M

Morgaine21

Gast
Hallo,

ich habe das Problem nun gelöst.
Ich fange einfach alle NULL Werte ab und schon funktioniert es. Danke für die Zahlreichen Tipps.
 
Ähnliche Java Themen

Ähnliche Java Themen

Neue Themen


Oben