Crazy Bytes
Mitglied
Hallo,
ich habe folgendes Problem: Ich muss mehrere Werte verschiedenen Typs (Boolean, Double, Long, String) in einer Spalte ausgeben. Leider richtet sich das JTable immer nach dem ersten Wert in der Spalte, so dass alle folgenden Werte in der Spalte als gleicher Typ des ersten Wertes behandelt werden, z.B. Boolean wenn der erste Wert ein Boolean ist.
Ich habe jetzt schon verschiedene Ansätze versucht, ich habe einen eigenen CellRenderer und CellEditor geschrieben. Bei der einfachen Anzeige der Werte stellt der CellRenderer die Daten auch richtig dar, wähle ich dann aber eine Zelle zum Bearbeiten aus, bekomme ich eine ClassCastException. Ich vermute das es am CellEditor liegt oder an der überschriebenen Methode prepareEditor() in meinen JTable liegt.
Hat irgendeiner eine Idee wie ich das Problem lösen kann?
Vielen Dank schon mal für Eure Hilfe.
Bis dann...
CB
ich habe folgendes Problem: Ich muss mehrere Werte verschiedenen Typs (Boolean, Double, Long, String) in einer Spalte ausgeben. Leider richtet sich das JTable immer nach dem ersten Wert in der Spalte, so dass alle folgenden Werte in der Spalte als gleicher Typ des ersten Wertes behandelt werden, z.B. Boolean wenn der erste Wert ein Boolean ist.
Ich habe jetzt schon verschiedene Ansätze versucht, ich habe einen eigenen CellRenderer und CellEditor geschrieben. Bei der einfachen Anzeige der Werte stellt der CellRenderer die Daten auch richtig dar, wähle ich dann aber eine Zelle zum Bearbeiten aus, bekomme ich eine ClassCastException. Ich vermute das es am CellEditor liegt oder an der überschriebenen Methode prepareEditor() in meinen JTable liegt.
Hat irgendeiner eine Idee wie ich das Problem lösen kann?
Code:
// Class myJTable:
public class myJTable extends JTable {
public myJTable () {
setCellEditor(new myCellEditor(new JTextField()));
}
public Component prepareEditor(TableCellEditor editor, int row, int col) {
Component comp = super.prepareEditor(editor, row, col);
// Die Tabelle hat IMMER 16 Zeilen, die den in der Abfrage dargestellten
// Aufbau haben
if(row == 0 || row == 3){
JCheckBox box = (JCheckBox)comp;
box.setEnabled(true);
}
if(row == 1 || row == 2 || row == 4 || row == 5 || row == 6
|| row == 7 || row == 8 || row == 9 || row == 10
|| row == 11 || row == 12 || row == 13 || row == 14 || row == 15) {
JTextField tf = (JTextField)comp;
tf.setDocument(new PlainDocument());
tf.selectAll();
tf.setCaretPosition(0);
}
return comp;
}
}
// Class myCellEditor
public class myCellEditor extends DefaultCellEditor {
public myCellEditor (JTextField jtf) {
super(jtf);
setClickCountToStart(2);
}
public myCellEditor (JCheckBox chk) {
super(chk);
}
public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
if(value instanceof Boolean) {
return new JCheckBox("", ((Boolean) value).booleanValue());
} else {
return super.getTableCellEditorComponent(table, value, isSelected, row, column);
}
}
}
Vielen Dank schon mal für Eure Hilfe.
Bis dann...
CB