Checkbox oder String in JTable-Spalte

  • Themenstarter Themenstarter Sladda123
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
S

Sladda123

Gast
Hallo allerseits,

in einer Spalte (0) meiner JTable sind Boolean werte und manchmal auch nur Strings.
Nun klappt es hervorragend die Booleans als Checkbox anzuzeigen mit
Code:
public Class getColumnClass(int column)
{
	if (column == 0)return Boolean.class;
}
leider gibts ne ClassCastException sobald eben kein Boolean als wert kommt, sondern ein String.
Es sollten aber Checkboxen für Bools und Labels für String gerendert werden...

Hat jemand einen Rat was man da tun kann ?

Vielen Dank!
mfg
Sladda
 
hm, geht es überhaupt, dass man in einer Spalte unterschiedliche Datentypen hat ?
 
Eigentlich kann eine Spalte nur einen Datentyp haben. Aber du kannst einen eigenen TableCellRenderer/Editor schreiben, der dann halt je nach Inhalt der einzelnen Zellen was anderes anzeigt.

Siehe hier und hier
 
Muss leider nochmal stören...
Erstmal vielen Dank für deinen Tip Beni, ich habe es gleich mit einem eigenen CellRenderer probiert,
aber leider klappt es noch nicht ganz:

Code:
public class MyTableCellRenderer extends DefaultTableCellRenderer implements TableCellRenderer {

        public Component getTableCellRendererComponent(JTable table, Object value,
                boolean isSelected, boolean hasFocus, int rowIndex, int vColIndex) {
        	
        	super.getTableCellRendererComponent(table, value, isSelected, 
                    hasFocus, rowIndex, vColIndex);
        	
        	if (value == null) return this;
        	
        	if (value instanceof String) {
        		if ("".equalsIgnoreCase((String)value)) return this;
        		String tmp= (String)value;
        		if (!tmp.contains("@")){
        			this.setFont(new Font("Arial",1,12));
        		}
        	}
        	
        	if( value instanceof Boolean ){ 
                if( ((Boolean)value).booleanValue() ) 
                    this.setValue(Boolean.TRUE); 
                 else 
                	 this.setValue(Boolean.FALSE); 
               }
        	
            return this;
        }

    }

Zur Erklärung folgendes:
Wenn in der Zelle eine Email-Adresse steht, soll sie normal angezeigt werden.
Wenn in der Zelle keine Email-Adresse steht, aber immer noch ein String, soll er fett angezeigt werden.
(das beides klappt ganz gut)
und wenn in der Zelle ein Boolean steht, soll eine Checkbox angezeigt werden <-- Das funktioniert immer noch nicht. Beim jetzigen Code wird einfach "true" bzw. "false" in die Zelle geschrieben, von einer Checkbox fehlt jede Spur. Es muss wohl an
Code:
 this.setValue(Boolean.TRUE);
liegen ??? Ich weiß aber nicht was ich da sonst reinschreiben muss...
Ich hoffe es kann mir nochmal jemand helfen bitte!
Vielen Dank!
 
Hallo,

versuche es mal mit:

Code:
if( value instanceof Boolean ) { 
    return new JCheckBox("", ((Boolean)value).booleanValue());
}

Achtung nicht getestet!
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben