Hallo zusammen, ich hab mal wieder ein Problem.
Ich habe eine JComboBox als Celleditor eingerichtet - funktioniert gut soweit.
Aber wie krieg ich es hin, über diesen Celleditor ein neues Element anzulegen?
Konkret:
Das ist der Editor:
Hier wird die wg gespeichert:
Funktioniert auch gut soweit - die wg erhält aus der saveOrUpdate-Methode sogar die Id des neuen Datensatzes zurück. Wg ist danach also ein vollwertiges, persistentes Objekt.
Aber model.setValueAt funktioniert nicht! Scheinbar wird beim edieren einer Zelle nicht die Zeile selektiert (die logger-zeile):
Ich hab schon nach einem "Edit-Listener" oder so gesucht, aber der TableModelListener hat ja nur das tableChanged-Event, das wird nicht ausgelöst (bisher).
Also, am liebsten würde ich der Combobox sagen, sie soll das neue Element aus der Edit-Prozedur zurückgeben.
Die weniger "schöne" Lösung wär wohl, aus der Zeile das geänderte objekt in der Datenbank zu speichern und die Tabelle schlicht neu einzulesen.
Komm aber bei beiden Ideen nicht weiter
Ich habe eine JComboBox als Celleditor eingerichtet - funktioniert gut soweit.
Aber wie krieg ich es hin, über diesen Celleditor ein neues Element anzulegen?
Konkret:
Das ist der Editor:
Java:
@SuppressWarnings("unchecked")
private javax.swing.JComboBox getWgEditor() {
java.util.List<data.Wg> tmpListe = (java.util.List<data.Wg>) session.createQuery("from data.Wg").list();
javax.swing.JComboBox comboBox = new javax.swing.JComboBox(tmpListe.toArray());
comboBox.setEditable(true);
comboBox.addActionListener(new java.awt.event.ActionListener() {
/**
* Bei "Not in List" wird eine neue WG angelegt.
*/
public void actionPerformed(ActionEvent ae) {
if ((((javax.swing.JComboBox)ae.getSource()).getSelectedIndex() == -1) &&
(!((javax.swing.JComboBox)ae.getSource()).getSelectedItem().toString().isEmpty()))
saveNewWg(((javax.swing.JComboBox)ae.getSource()).getSelectedItem().toString());
}
});
return comboBox;
}
Hier wird die wg gespeichert:
Java:
/**
* speichert eine Neue WG in die Datenbank
* @param wgName
*/
private void saveNewWg(String wgName){
if (!this.wg.getWgName().matches(wgName)){
logger.debug("wgs: this.wg: " + this.wg.getWgName()+ "newString: " + wgName);
wg = new data.Wg();
wg.setWgName(wgName);
int selectedRow = this.getSelectedRow();
org.hibernate.Transaction tx = session.beginTransaction();
session.saveOrUpdate(wg);
tx.commit();
getColumnModel().getColumn(1).setCellEditor(new javax.swing.DefaultCellEditor(this.getWgEditor()));
logger.debug("Neue Wgid?: " + wg.getId());
logger.debug("Selected Row: " + selectedRow);
model.setValueAt(wg, selectedRow, 1);
logger.debug("Selected Uni: " + getModel().getValueAt(selectedRow, 1));
}
}
Aber model.setValueAt funktioniert nicht! Scheinbar wird beim edieren einer Zelle nicht die Zeile selektiert (die logger-zeile):
Code:
Selected Uni: null
Ich hab schon nach einem "Edit-Listener" oder so gesucht, aber der TableModelListener hat ja nur das tableChanged-Event, das wird nicht ausgelöst (bisher).
Also, am liebsten würde ich der Combobox sagen, sie soll das neue Element aus der Edit-Prozedur zurückgeben.
Die weniger "schöne" Lösung wär wohl, aus der Zeile das geänderte objekt in der Datenbank zu speichern und die Tabelle schlicht neu einzulesen.
Komm aber bei beiden Ideen nicht weiter
Zuletzt bearbeitet: