JTable ComboBox in Zelle soll andere Zelle beeinflussen

Moltar

Mitglied
Hallo,

ich habe eine Tabelle mit Daten, die Darstellung der Daten, hinzufügen und entfernen etc. klappt alles wunderbar.
Nun wollte ich eine Spalte mit JComboBoxen füllen. Wenn in der JComboBox ein Eintrag ausgewählt wird, soll in der nebenstehenden Zelle automatisch der Wert geändert werden.

Beispiel 1: so klappt es:
Code:
// Im Panel:
tableModel = new DefaultTableModel(colHeads, 0);
table = new MyTable(tableModel);
final HashMap<Object, Object> map = new HashMap<Object, Object>();
map.put(...);
final JComboBox bx = new JComboBox(map.keySet().toArray());
bx.addActionListener(new ActionListener() {
	public void actionPerformed(ActionEvent e) {
	tableModel.setValueAt(map.get(bx.getSelectedItem()), table.getSelectedRow(), 2);
}
});

//In der Editor-Klasse:

public Component getTableCellEditorComponent(final JTable table, final Object value, boolean isSelected, final int row, int col) {
		component = new JComboBox(component.getModel());
		component.setSelectedItem(value);
		return component;
}

Beispiel 2: so nicht:
Code:
// Im Panel:
// Editor setzen....

// Im Editor:
public Component getTableCellEditorComponent(final JTable table, final Object value, boolean isSelected, final int row, int col) {
		component = new JComboBox(data.keySet().toArray());
		component.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				((DefaultTableModel)table.getModel()).setValueAt(data.get(value), row, partnerCol);
// Geht auch nicht, wenn nachfolgende Zeile nicht auskommentiert.
				//((DefaultTableModel)table.getModel()).fireTableDataChanged();
		
			}
		});
		component.setSelectedItem(value);
		return component;
	}

Sorry, wenn der Code nicht funktioniert, ist aus verschiedenen Klassen zusammenkopiert.

Kurz zusammengefasst: Wenn ich eine JComboBox anlege, mit Werten fülle und den ActionListener zuweise und diese fertig ComboBox dann an meinen Editor übergebe, funktioniert es.
Wenn ich die ComboBox erst im Editor zusammenbaue, funktioniert es nicht.
Ich wollte aber vermeiden, die ComboBox jeweils außerhalb des Editors erst zusammenbauen zu müssen.

Für Hilfe, Anregungen, Tipps, etc. wäre ich dankbar.

Grüße Moltar
 
Zurück