Mam pytanie w związku z wykrywaniem zmian dokonywanych w komórkach JTable. Nie znalazłem bezpośredniej metody, który pozwala na określenie, czy dane modelu tabeli (lub tabeli) zostały zmodyfikowane. Ale widzę, że po zmodyfikowaniu tych danych każdorazowo wywoływana jest metoda fireTableCellUpdated(int row, int column). We własnej klasie modelu tabeli nadpisałem tą metodę i chce przechwytywać zmiany i wykonywać coś w innej cześci aplikacji, jeśli te dane po zmianie rzeczywiście będą inne. Robię więc tak:
- tworzę pole: private FormattedTableModel primaryModel;
- implementuje interfejs Cloneable
- nadpisuję metodę wywoływaną przy updacie danych w komórkach:
public void fireTableCellUpdated(int row, int column)
{
super.fireTableCellUpdated(row, column);
if(primaryModel != null)
{
String primaryValue = (String)primaryModel.getValueAt(row, column);
String modifiedValue = (String)this.getValueAt(row, column);
if(!primaryValue.equals(modifiedValue))
//kod wykonywany po modyfikacji danych
}
try {
primaryModel = (FormattedTableModel)this.clone();
} catch (CloneNotSupportedException ex) {
ex.printStackTrace();
}
}
Czemu jednak po modyfikacji danych w tabeli ulega modyfikacji sklonowany obiekt ? Przecież primaryModel to już nie jest referencja do tego samego obiektu. Poza tym jeśli ktoś ma lepszy pomysł na rozpoznawanie statusu tabeli to prosiłbym o wskazówki.