Я опоздал на 7 лет, но, возможно, это все еще интересно для вас;)
Я решил эту проблему с помощью шаблона Observer.
В моем примере есть обзорный вид (=observer
; таблица из БД) и подробный вид (=observable
; содержит строку из обзорного вида). Теперь я хочу отредактировать (в обзорном виде) выбранную строку в подробном виде, нажать кнопку сохранения, закрыть подробный вид и notify
изменения (всех) наблюдателей.
public interface Observer {
public void notifyUpdate(Contact contact);
}
public interface Observable {
public void addObserver(Observer observer);
}
public class Detail extends JFrame implements Observable {
/* multiple observers possible */
private ArrayList<Observer> observers;
/* contact will be modified in detail-view and reported to overview-view */
private Contact contact;
public Detail() {
this.observers = new ArrayList<>();
}
@Override
public void addObserver(Observer observer) {
this.observers.add(observer);
}
/* trigger this methode e.g. by save-button, after modifiing contact */
protected void notifyObservers() {
/* multiple observers possible */
Iterator<Observer> observerIterator = this.observers.iterator();
while(observerIterator.hasNext()) {
/* report observer: constact has modified */
observerIterator.next().notifyUpdate(contact);
}
}
}
public class Contacts extends JFrame implements Observer {
private Detail detail;
public Contacts() {
detail = new Detail();
detail.setVisible(true);
detail.addObserver(this);
}
@Override
public void notifyUpdate(Contact contact) {
/* notifyUpdate was called from Observable */
/* process contact, DB update, update JTable */
}
}