pobieranie danych z innego okna

pobieranie danych z innego okna
KR
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 3
0

Witam!
Tworzę aplikację okienkową, w której potrzebuję, aby informację z okna potomnego były przekazywane do okna nadrzędnego, ale dopiero po zamknięciu tego okna potomnego. W pierwszym oknie mam tabelę, w drugim oknie mam jakieś przykładowo pola tekstowe i dwa przyciski, "OK" i "Anuluj". Chcę, aby dane z pól tekstowych tego drugiego okna dodały się do tabeli w oknie pierwszym, jednak dopiero po zamknięciu tego drugiego okienka poprzez naciśnięcie "OK".
Przykładowo w drugim oknie mam metodę:

Kopiuj
public String getData(){
            return textField1.getText();
        } 
 

W pierwszym oknie, dla przycisku otwierającego drugie okienko mam coś takiego:

Kopiuj
 dodaj.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent e){
              NoweOkno okno = new NoweOkno();
              okno.setVisible(true);
              System.out.println("Dane z okna drugiego: "+okno.getData());  // - to tylko przyklad
            }
  });
 

Wszystkie instrukcje wykonują się od razu, a ja bym chciał żeby ostatnia instrukcja z powyższego przykładu poczekała aż wcisnę ten przycisk "OK". Możecie jakoś naprowadzić? Dzięki, pozdrawiam.

Shalom
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Space: the final frontier
  • Postów: 26433
0

Jeśli oczekujesz jakiegoś magicznego rozwiazanie to takiego nie ma. Musisz zwyczajnie powiązać ze sobą te okienka przekazując referencję / jakiegoś listenera i updatować dane w głównym oknie dopiero kiedy ktos kliknie ok.

KR
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 3
0

A wiesz może jakiego listenera należałoby użyć? Siedzę już trzeci dzień nad tym, ale nie mogę nic wymyślić, szukałem w necie ale nie znalazłem rozwiązania, aż się zarejestrowałem na forum, bo chyba sam sobie nie poradzę... I właśnie czegoś takiego szukam, w jaki sposób przekazać informację o zdarzeniu z okna nadrzędnego?

Shalom
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Space: the final frontier
  • Postów: 26433
0

Jak to "jakiego listenera"? Normalne, napisanego przez ciebie. Listener to jest po prostu obiekt który będzie miał referencję do głównego okna i metodę pozwalającą na zasygnalizowanie że zaszła zmiana. Dodatkowo obiekty które mogą być "obserwowane" powinny przechowywać listę takich Listenerów i uruchamiać na nich akcje kiedy jest taka potrzeba. Poszukaj pod nazwą: Observer

Kopiuj
class MainWindow{
  public final setX(){
  }
}

class SimpleListener{
  private MainWindow window;
  public SimpleListener(MainWindow w){
    window = w;
  }

  public void notifyUpdate(){
    window.setX();
  }
}

class ObservedObject(){
  private final List<SimpleListener> listeners = new LinkedList<SimpleListeners>();
  public void registerListener(SimpleListener newListener){
    listeners.add(newListener);
  }

  private void triggerUpdate(){
    for(SimpleListener listerner : listeners){
      listener.notifyUpdate();
    }
  }
}

Oczywiście jeśli tylko jedno okienko może te updaty triggerować to nie koniecznie jest sens tak robić, bo wystarcz powiązać ze sobą zwyczajnie te 2 okienka...

KR
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 3
0

Dzięki wielkie za nakierowanie, wzorzec projektowy "obserwator" to jest to czego mi było trzeba, nie słyszałem o tym wcześniej, ale poczytałem, pomyślałem i zrobione:)
Gdybyś jeszcze zechciał napisać co to jest wg Ciebie "zwyczajne powiązanie ze sobą dwóch okienek" to byłoby świetnie, czyżby istniało jeszcze prostsze rozwiązanie niż obserwator gdy chodzi tylko o dwa okienka? Tak czy siak dzięki, sam bym tego nie znalazł, mogę ruszyć w końcu do przodu z pisaniem:)

  • Rejestracja: dni
  • Ostatnio: dni
0

Wydaje mi się że chodzi o to że w okienku potomnym masz referencje do okienka nadrzędnego i w metodzie actionPerformed dla przycisku zamkania wywolujesz metody okna nadrzędnego przekazując do nich jako argumenty informacje które chcesz do tego okna wysłać.

PS
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 19
0

Też zmierzyłem się z tym problemem.
Nie wiem czy odpowiedź Cię w pełni usatysfakcjonuje, ale próbowałeś może użyć setModal(true) na rzecz wyskakującego okna z którego chcesz pobrać dane?
To chyba prosty sposób.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.