aLiKe: TableCellRenderer macht nichts?!

Hi,

also bin seit zwei Tagen dabei eine Tabelle mit einem TabelCellRenderer hinzubekommen.
Ich bin eigentlich der Meinung ich hätte verstanden was

public Component getTableCellRendererComponent(JTable table, Object object, boolean isSelected,
boolean hasFocus, int row, int column)

macht. Aber scheinbar doch nicht. Ich will die Schrift(bzw den Hintergrund) derjenigen Zellen in Spalte 5 ändern, wenn deren Doublewert negative ist.
Also hab ich folgendes zusammengeschustert:

if (object == null) return this;

column = table.convertColumnIndexToModel(column);
if (column == 5){
    if (((Double)object).compareTo(new Double(0)) < 0){
        setBackground(Color.GREEN);
    }

}
return this;
}

Aber da tut sich nichts. Hab auch schon mal nen syso in der Methode probiert, ob die überhaupt ausgeführt wird, aber auch da tut sich nichts....

Bitte um Hilfe:D

  1. Hallo,

    dein Code sieht auf den ersten Blick nicht falsch aus.

    Wird vielleicht irgendwo eine Exception verschluckt?
    Setzt du den CellRenderer überhaupt für die Tabelle bzw. die Spalte?

    Gib bitte ggf. etwas mehr Code an.

    Gruß
    Slyh

    1. Wird vielleicht irgendwo eine Exception verschluckt?

      Nein, alle Exceptions die ich irgendwo abfange werden trotzdem mit Exception.printStackTrace() ausgebeben. Dürften also nicht verschluckt werden.

      Setzt du den CellRenderer überhaupt für die Tabelle bzw. die Spalte?

      table = new JTable();
      table.setDefaultRenderer(Messung.class,new MessungsRenderer());

      Hier setz ich den CellRenderer. Im Archiv von 2004 hab ich gefunden, dass das erste Attribut aussagt, das der CellRenderer für Spalten mit dieser Klasse definiert wird. Hab das also so geändert:

      table = new JTable();
      table.setDefaultRenderer(Double.class,new MessungsRenderer());

      Da die letzte Spalte ein Double beinhaltet.

      Nun sind alle Zellen der letzten Spalte blau, ohne Inhalt.

      Hab aber(geb ich zu) das in den letzten 5 Minuten gemacht, also noch nichts weiter probiert mit dem Double.class.

      Wäre trotzdem für weitere Hilfe dankbar:D

      Max

      1. Hallo,

        table = new JTable();
        table.setDefaultRenderer(Messung.class,new MessungsRenderer());

        Hier setz ich den CellRenderer. Im Archiv von 2004 hab ich gefunden, dass das erste Attribut aussagt, das der CellRenderer für Spalten mit dieser Klasse definiert wird. Hab das also so geändert:

        table = new JTable();
        table.setDefaultRenderer(Double.class,new MessungsRenderer());

        Das sieht besser aus, ja.
        Du kannst auch CellRenderer für einzelne Spalten definieren, indem du
        dir von der Tabelle über getColumn(int) eine einzelne Spalte
        (TableColumn) holst und für diese den CellRenderer (setCellRenderer())
        setzt.

        Da die letzte Spalte ein Double beinhaltet.

        Nun sind alle Zellen der letzten Spalte blau, ohne Inhalt.

        Blau? Du meinst grün, oder?

        Setzt du den übergebenen Wert auch irgendwo? Am besten ist, du
        rufst in deiner getTableCellRendererComponent(...) zuerst
        super.getTableCellRendererComponent(...) auf. Dann kann eigentlich
        fast nichts mehr schiefgehen.
        Du leitest doch von DefaultTableCellRenderer ab, oder?

        Guck dir mal die Implementierung von getTableCellRendererComponent(...)
        in javax.swing.table.DefaultTableCellRenderer an. Dann sollte klarer
        werden, was da passiert...

        Gruß
        Slyh

        1. War tatsächlich alles Blau, lag aber daran das ich die Werte nicht gesetzt hab.

          Hab nun alles hinbekommen, und bedanke mich für die Hilfe.

          Werd mal gucken das ich den Renderer nur auf bestimmte Spalten hinbekomme, thx für den Tipp;)

          Achja, Falls es dich noch interessiert:

          Mein renderer war von JLabel abgeleitet und hat den TableCellRenderer implementiert. Müßte ja aber aufs gleiche hinaus kommen.