Hallo!
Ich finde irgendwie keine Lösung für folgendes Problem. Ich fülle eine Tabelle mit verschiedenen Daten (von verschiedenen Datentyp), wobei im Vorhinein nicht bekannt ist, welche Daten wo stehen werden. Anhand des Datentyps wird ein entsprechender Renderer für die Tabellenzelle gewählt (also z.B. JCheckBox für Boolean).
Jetzt gibt es einen Datentyp "ComboBoxValues" indem Einträge stehen, die in einem Combobox renderer dargestellt werden sollen. Die Definition eines einfachen Combobox Editors/Renderers ist ziemlich einfach, wenn die Einträge für jede Combobox Zelle gleich sind. Bei mir sind die Einträge jedoch von Zelle zu Zelle unterschiedlich.
Hat jemand eine Ahnung, wie man sowas gescheit machen kann?
Danke und Grüße,
P.S: hier noch etwas Code (Ausschnitte bzw. vereinfacht):
Editor:
Renderer:
Ich finde irgendwie keine Lösung für folgendes Problem. Ich fülle eine Tabelle mit verschiedenen Daten (von verschiedenen Datentyp), wobei im Vorhinein nicht bekannt ist, welche Daten wo stehen werden. Anhand des Datentyps wird ein entsprechender Renderer für die Tabellenzelle gewählt (also z.B. JCheckBox für Boolean).
Jetzt gibt es einen Datentyp "ComboBoxValues" indem Einträge stehen, die in einem Combobox renderer dargestellt werden sollen. Die Definition eines einfachen Combobox Editors/Renderers ist ziemlich einfach, wenn die Einträge für jede Combobox Zelle gleich sind. Bei mir sind die Einträge jedoch von Zelle zu Zelle unterschiedlich.
Hat jemand eine Ahnung, wie man sowas gescheit machen kann?
Danke und Grüße,
P.S: hier noch etwas Code (Ausschnitte bzw. vereinfacht):
Editor:
Code:
public class TestCellEditor extends AbstractCellEditor implements TableCellEditor {
private Map<String,TableCellEditor> editors = new HashMap<String,TableCellEditor>();
private TableCellEditor editor = new DefaultCellEditor(new JTextField());
public TestCellEditor() {
super();
editors.put(Boolean.class.getName(), new DefaultCellEditor(new JCheckBox()));
editors.put(String.class.getName(), new DefaultCellEditor(new JTextField()));
editors.put(ComboBoxValues.class.getName(), new DefaultCellEditor(new JComboBox()));
}
public Object getCellEditorValue() {
return editor.getCellEditorValue();
}
public void addCellEditorListener(CellEditorListener l) {
editor.addCellEditorListener(l);
}
public void removeCellEditorListener(CellEditorListener l) {
editor.removeCellEditorListener(l);
}
public boolean stopCellEditing() {
return editor.stopCellEditing();
}
public void cancelCellEditing() {
editor.cancelCellEditing();
}
public Component getTableCellEditorComponent(JTable table,
Object value, boolean isSelected, int row, int column) {
comboVal = null;
if (value instanceof Boolean) {
editor = editors.get(Boolean.class.getName());
}
else if (value instanceof ComboBoxValues) {
editor = editors.get(ComboBoxValues.class.getName());
}
//...
else {
editor = editors.get(String.class.getName());
}
return editor.getTableCellEditorComponent(table, value, isSelected, row, column);
}
}
Renderer:
Code:
public class TestCellRenderer extends DefaultTableCellRenderer {
protected JComboBox comboBox = new JComboBox();
public Component getTableCellRendererComponent(
JTable table, Object value,
boolean isSelected, boolean hasFocus,
int row, int column) {
if (value instanceof ComboBoxValues) {
ComboBoxValues tmpo = (ComboBoxValues)value;
for (Object s : tmpo.getEntries()) {
comboBox.addItem(s);
}
return comboBox;
}
return super.getTableCellRendererComponent(
table,value,isSelected,hasFocus,row,column);
}
}