Benutzerdefinierter TableCellRenderer akzeptiert nur Stringwerte

Status
Dieses Thema wurde gelöst! Zur Lösung gehen…

Madebuvie

Mitglied
Hallo zusammen,
ich habe einen benutzerdefinierten TableCellRenderer erstellt, der verschiedene bedingte ZellFarben und Zeilenumbrüche erzeugen soll.
Dieser funktioniert auch, jedoch nur mit Stringwerten.
Spalte 0 der Tabelle ist vom Typ int, der Rest ist vom Typ String. Die erste Spalte habe ich bis jetzt mit einem Workaround gelöst, indem ich
erst ab der 2ten Spalte auslese.

Java:
package renderer;

import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Rectangle;

import javax.swing.JTable;
import javax.swing.JTextArea;
import javax.swing.table.TableCellRenderer;
import javax.swing.text.BadLocationException;

public class UserTableCellRenderer  extends JTextArea implements TableCellRenderer {

    private static final long serialVersionUID = 1L;
    Color bkgndColor;
    Color fgndColor;

    public UserTableCellRenderer() {
        setLineWrap(true);
        setWrapStyleWord(true);
        this.bkgndColor = bkgndColor;
        this.fgndColor = fgndColor;
        
        
    }

    
    @Override
    public Component getTableCellRendererComponent(JTable table, Object value,
            boolean isSelected, boolean hasFocus, int row, int column) {
        this.setText((String) value);
    
        final int columnWidth = table.getColumnModel().getColumn(column).getWidth();
        final int rowHeight = table.getRowHeight(row);
        this.setSize(columnWidth, rowHeight);
        this.validate();

        //Color Begin
        
        this.setBackground(bkgndColor);
        this.setForeground(fgndColor);       
        
            
        }
        //Color End
        
        return this;
    }       
}

Java:
            UserTableCellRenderer dynRow = new UserTableCellRenderer();
            if (z>0){
                this.table.getColumnModel().getColumn(z).setCellRenderer(dynRow);    
            }

Gibt es eine Möglichkeit den Renderer mit verschiedenen Formaten zu füttern.

Viele Grüße
MaDeBuVie
 
Hallo zusammen,
hab's mittlerweile selber lösen können.

Java:
        if (value==null){
            
        } else {
            if (value instanceof String){
                this.setText((String) value);
            }else{
                this.setText((String) value.toString());
            }
        }

Viele Grüß
MaDeBuVie
 
Sollte nicht
Java:
setText((value == null) ? "" : value.toString());
einfacher sein?

(Und auch ein bisschen "korrekter" mit Nullwerten umgehen. Möglicherweise würde dein Code Zellen, die vorher non-null waren und nun auf null gesetzt werden, nicht aktualisieren und so deren alten Inhalt stehen lassen. Das ist aber nur eine gewagte Vermutung -- dazu müsste man wohl tiefer in der API-Doku kramen. Aber warum schwer, wenn's auch leicht geht -- mit obigem Code.)
 
Zuletzt bearbeitet:
Status
Dieses Thema wurde gelöst! Zur Lösung gehen…
Zurück