Java [1242]

Zapisz się
Dodaj kartkę Dodaj bana
Powód wlepienia kartki
Wybierz wątek docelowy z listy lub wpisz jego ID
  • sunseeker

    Witam, zaczynam dopiero zabawe z Java i mam maly problem jesli chodzi o programowanie zdarzeniowe. Zeby bylo jasniej to mam taki prosty programik: http://www.ee.pw.edu.pl/~kowalst1/N... ... Tworzy on Ramke, w niej przycisk i pole tekstowe. Klik na przycisk -> nowa ramka, a w niej to samo, przycisk i pole. Chce zeby po wpisaniu czegos w to pole a nastepnie kliknieciu przycisku text ustawial mi sie w pierwszej ramce w polu, choc moze byc to cokolwiek. Chodzi mi o sama operacje pobrania czegos, jakiejs zmiennej z jednej ramki do drugiej. Troche nie mam pojecia jak to zrobic mimo wertowania tutoriali i dokumentacji, nie umiem wyjsc poza klase. Probowalem to robic jakos z dziedziczeniem, ale tez nie wychodzi. Moze ktos pokazalby na tym przykladzie jak to rozwiazac...
  • Koziołek [brat Javowiec]

    Nie podam ci odpowiedzi ponieważ jak chcesz się uczyć to wystarczy podpowiedź :)

    Najprostszym modelem służącym do tego typu komunikacji i powiadamiania jest:

    Wzorzec Projektowy Obserwator
    (Design Pattern Observer)

    Pozdrawiam
  • sunseeker

    Dzieki, bezskutecznie szukałem odpowiedzi w roznych madrych ksiazkach...
  • Eric Wu

    Wzorce projektowe to bardzo fajna rzecz.
    Niekiedy nawet niezbędna.
    Dobrze jest się z nimi zaprzyjaźnić. :)
  • sunseeker

    Znalazłem, poczytałem i niestety poległem. Jest całkiem sporo napisane o tym wzorcu, ale niestety zbyt enigmatycznie/na zbyt abstrakcyjnych przykladach jak na moją wiedzę :/. Przykład jest prosty więc może ktoś moglby pokazac przykladowe rozwiązanie tego, bo ja sie mecze juz 3 dzien i nie ruszyłem tego ani o milimetr. Potworzyłem ledwie jakies interfejsy ktore zaimplementowalem do klas, dodałem obserwatorów i utknąłem. Pomoże ktoś?
  • Eric Wu

    Podpowiedź:
    Obserwowanym jest klasa opisująca kolejne ramki potomne. Nie trzeba dla nich tworzyć listy obserwatorów - bo obserwator jest z założenia jeden. Ale można, jeśli chce się zachować elastyczność rozwiązania.
    Obserwatorem jest ramka główna.

    Przy tworzeniu ramki musi być do niej przekazany wskaźnik na ramkę główną (poprzez "this" z ramki głównej lub z pola go zawierającego z ramki potomnej).
    Każda taka ramka musi zachować w polu prywatnym (lub na liście) wskaźnik na obserwatora, czyli ramkę główną (w java wszystkie pola, poza typami prostymi, działają tak jak wskaźniki - to znaczy przypisując this do jakiegoś pola czy wartości jednej zmiennej do innej nie otrzymuje się nowej instancji klasy).
    I potem przy zmianie tekstu taka ramka wywołuje na obserwatorze (ramce głównej) metodę uaktualnij.
  • sunseeker

    A może jednak ktoś pokazałby jak to zrobić bo trace na to za duzo czasu i nigdzie nie dochodze :/
  • sunseeker

    Odwołuje. Rozwiazalem to w inny sposób, drugą ramkę potraktowałem po prostu jako klasę wewnetrzną pierwszej ramki i dziala jak należy.
  • sunseeker

    A jeszcze zapytam. Bo z tego co rozumiem to wzorzec obserwatora stosujemy wtedy kiedy wiele obiektów jest zainteresowanych zmianą innego. Czy zastosowanie obserwatora ma sens kiedy jeden obiekt nasłuchuje zmian w wielu obiektach ?