Hallo zusammen,
in meiner Java-Klasse können in einem JTable auch bestimmte Spalten editiert werden. Dazu verwende ich einen eigenen Listener, der das Interface TableModelListener mit der Methode tableChanged implementiert:
Dieser hört auf einen TableModelEvent, der in dem Model des Tables duch die Methode fireTableCellUpdated ausgelöst wird. Dies passiert in der überschriebenen Methode setValue des Models.
Diese Methode wird aber nur ausgelöst, wenn der Anwender nach Eingabe des Wertes entweder die Enter-Taste oder die Tab-Taste betätigt.
Meine Frage ist nun, ob ich den TableModelEvent auch schon auslösen kann ohne eine Betätigung dieser Tasten. Der Anwender will die Möglichkeit haben, den Inhalt des Tables nach Eingabe der Änderung in den betroffenen Zellen gleich nach Drücken eines entsprechenden Buttons abzuspeichern.
Ich bin für jeden Hinweis dankbar
Stefan K.
in meiner Java-Klasse können in einem JTable auch bestimmte Spalten editiert werden. Dazu verwende ich einen eigenen Listener, der das Interface TableModelListener mit der Methode tableChanged implementiert:
Code:
private class MyTableModelListener implements TableModelListener {
JTable table;
public MyTableModelListener(JTable table) {
this.table = table;
}
public void tableChanged(TableModelEvent e) {
String spaltenName = this.table.getModel().getColumnName(e.getColumn());
if (e.getType() == TableModelEvent.UPDATE) {
if (spaltenName.equalsIgnoreCase(MyTableModel.COL_EINTR_DATUM)
|| spaltenName.equalsIgnoreCase(MyTableModel.COL_AUSTR_DATUM)) {
int selectedRow = e.getFirstRow();
int column = e.getColumn();
String wertNeu = clPersonen.getModel().getValueAt(selectedRow, column).toString();
firePropertyChange(PERS_PROP_CH_CELLUPDATE, e.getColumn(), wertNeu);
}
}
}
}
Dieser hört auf einen TableModelEvent, der in dem Model des Tables duch die Methode fireTableCellUpdated ausgelöst wird. Dies passiert in der überschriebenen Methode setValue des Models.
Code:
public void setValueAt(Object value, int row, int col) {
String fehlerText = "";
.
.
.
if (fehlerText.length() > 0) {
JOptionPane.showMessageDialog(new JDialog(), fehlerText, "GEWAN Fehler", JOptionPane.ERROR_MESSAGE);
} else {
int iOrder = row;
if (getSortListe() != null) {
iOrder = Integer.parseInt(getSortListe().get(row).toString());
}
data[iOrder][col] = value;
fireTableCellUpdated(row, col);
}
}
Diese Methode wird aber nur ausgelöst, wenn der Anwender nach Eingabe des Wertes entweder die Enter-Taste oder die Tab-Taste betätigt.
Meine Frage ist nun, ob ich den TableModelEvent auch schon auslösen kann ohne eine Betätigung dieser Tasten. Der Anwender will die Möglichkeit haben, den Inhalt des Tables nach Eingabe der Änderung in den betroffenen Zellen gleich nach Drücken eines entsprechenden Buttons abzuspeichern.
Ich bin für jeden Hinweis dankbar
Stefan K.