Wpis z mikrobloga

#java #programowanie #swing

Mam główne okno programu - Frame. Ma w sobie listę notatek oraz guzik addNote, który otwiera kolejne okno - AddWindow. W oknie AddWindow wybieram rodzaj notatki i ją dodaję - po naciśnięciu guzika w oknie AddWindow powinna się wywołać metoda updateContent() znajdująca się we Frame. W jaki sposób mogę to zrobić? Jakiś Listener na zmiany zachodzące w oknie?
  • 6
z tego co kojarzę na czuja to metoda updateContent jest wołana przez okno aplikacji i nie może być wywołana z innej metody. Zrób tak: ten kod, który masz w updateContent wyrzuć do osobnej metody, i zamiast niego wywołuj tą metodę. Dzięki temu możesz wywołać ją również z innego okna.
@czuraj: generalnie powinieneś wydzielić metody typu update() poza klasy JFrame, które są typowymi klasami widoku.

Wtedy masz np. coś takiego:

class Window1 extends JFrame{...}

class Window2 extends JFrame{...}

class X {

Window1 w1;

Window2 w2;

public X() {

w1 = new Window1();

w1.setX(this);

w2 = new Window2();

w2..setX(this);

}

void update(){

w1.setState();

w2.setState();

}

}

teraz zarówno z klasy W1 i W2 masz dostęp do referencji klasy X, na której mozesz
@Eoghan: @Ghostli: Gwoli ścisłości - została dodana tylko dlatego, że w głównym oknie dodałem WindowListener do tego drugiego okienka i po wywołaniu się windowClosed() wywołuję updateContent().
@czuraj: nie do końca rozumiem, czy nadal masz problem, bo piszesz, że po wywołaniu windowClosed wywołujesz updateContent() - nie możesz więc tego samego kodu wywołać w ActionListenerze podpiętym pod konkretny przycisk?

Polecam też przejść na JavęFX - tam wykorzystujesz observableArrayList, po dodaniu czegokolwiek do takiej listy widok aktualizuje się automatycznie, nie trzeba wywoływać żadnych dodatkowych "odświeżaczy"