TableCellRenderer rendert Integer/Boolean Felder nicht

B3ast

Mitglied
Hallo,

habe einen kleinen Colorpicker gebastelt, welche die jeweiligen gewählten Farben auf die Table anwenden soll, sodass Hintergrundfarbe (von geraden/ungeraden Spalten), Textfarbe (foreground), Selektions und Gridfarbe vom User ausgewählt werden. Dies habe ich über den CellRenderer realisiert, der einfach ungerade Zellen anders färbt.

Soweit, so gut. Das funktioniert auch alles. Nun habe das dazugehörige TableModel programmiert in welchem Zahlen, Boolean-Werte, Strings und Datumswerte vorhanden sind.

Wende ich nun das TableModel auf die Table an funktioniert der Renderer nicht mehr richtig. Alle String und Date-Felder werden richtig angezeigt, alle Integer und Boolean-Felder nicht. Es ist wie wenn der Cell-Renderer auf diese Felder nicht richtig funktioniert.

Habe leider nichts im Internet zu diesem Problem gefunden was genau den Grund dafür beschreibt. Könntet ihr mir das Phänomen erklären und beschreiben mit welcher Methode ich dem ganzen aus dem Weg gehe?

Danke schonmal!

Hier mein CellRenderer:
Java:
    private TableCellRenderer renderer;
    private ColorPicker cp;
    
    public TableRenderer(TableCellRenderer renderer, ColorPicker cp) {
        this.renderer = renderer;
        this.cp = cp;
    }

    @Override
    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
        Component c = renderer.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
        
            if (row % 2 == 0) {
                c.setBackground(cp.getEvenBackground());
            }   else    {
                c.setBackground(cp.getUnevenBackground());
            }
            for (int i : table.getSelectedRows()) {
                if (row == i) {
                    c.setBackground(cp.getSelectionBackground());
                }
        }
        return c;
    }
 

Anhänge

  • Unbenannt.PNG
    Unbenannt.PNG
    18,2 KB · Aufrufe: 35
Das kann ich mir nicht vorstellen. Ich habe außerdem ein Testprogramm erstellt wo ich einen neuen CellRenderer geschrieben habe und dort war es exakt dasselbe. Das muss ein bekanntes Problem sein, allerdings komme ich nicht drauf wie man dieses löst.

Übergeben wird folgendes in der implementierenden Klasse:
Java:
        TableCellRenderer renderer = jTable1.getDefaultRenderer(Object.class);
        jTable1.setDefaultRenderer(Object.class, new TableRenderer(renderer, this));

EDIT: Nun habe ich mir deine Worte nochmal durch den Kopf gehen lassen. Ich setze den DefaultRenderer für Object.class, Boolean und Int sind aber garkeine Objekte >.<. Für Integer und Boolean kann ich mir einen StandardRenderer schnappen und es funktioniert! 🙂

Nun übergebe ich also, damit es funktioniert:
Java:
        TableCellRenderer renderer = jTable1.getDefaultRenderer(Object.class);
        TableCellRenderer intrenderer = jTable1.getDefaultRenderer(Integer.class);
        TableCellRenderer boolrenderer = jTable1.getDefaultRenderer(Boolean.class);
        jTable1.setDefaultRenderer(Object.class, new TableRenderer(renderer, this));
        jTable1.setDefaultRenderer(Integer.class, new TableRenderer(intrenderer, this));
        jTable1.setDefaultRenderer(Boolean.class, new TableRenderer(boolrenderer, this));
 
Zuletzt bearbeitet:

Neue Themen


Zurück
Oben