pobieranie danych z innego okna

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ę:

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

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

 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.

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.

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?

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

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...

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:)

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ć.

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.

1 użytkowników online, w tym zalogowanych: 0, gości: 1