• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

JavaFX i MVC

VPS Starter Arubacloud
0 głosów
1,331 wizyt
pytanie zadane 19 października 2016 w Java przez K0XM4N Gaduła (3,640 p.)

Witam!

Piszę pierwszą apke z wykorzystaniem frameworka javaFX. Jest to prosta gierka "Wisielec" dla jednego i dwóch graczy. Natknąłem się na pewien problem związany z wzorcem MVC w tym frameworku. Nie wiem dokońca jak zaprojektować dobrze aplikacje. Korzystałem z paru tutorialu na yt dotyczących javaFX i dowiedziałem się, że każdy view fxml, dzięki któremu uzyskuje się GUI powinien mieć własny kontroler. Tak też zrobiłem. 

Struktura projektu wygląda następująco:

Oznaczyłem kolejności okienek widoku żeby było wiadomo o co chodzi.

Otóż problem mam taki, że nie wiem za bardzo jak zrealizować wykonywanie logiki gry w osobnej klasie kontrolera. Wcześniej tworząc kalkulator w swingu z wykorzystaniem MVC zrobiłem to w ten sposób, że w widoku były zawarte wszelkie komponenty oraz metody przyjmujące argument obiektu Listener by dodać odbiorcę zdarzenia do obiektu Button. Następnie w kontrolerze zdarzenie było obsługiwane przez implementację interfejsu ActionListener w klasach wewnętrznych.

Co chciałem zrobić? np. w klasie SingleplayerInputPageController po kliknięciu przycisku play wykonała się pewna logika programu, czyli zestaw metod w których zostanie utworzony nowy gracz, wylosowane słowo, itd
 

W javieFX listenery chyba nie działają tak jak w swingu i trochę się tu pogubiłem. Będę wdzięczny na naprowadzenie mnie na rozwiązanie. Kminiłem tez z interfejsami, ale czy tak to powinno wyglądać? :P

1 odpowiedź

0 głosów
odpowiedź 21 października 2016 przez Mateusz51 Nałogowiec (28,180 p.)

Na wstępie. Dawno nie pisałem w javaFX ale z tego co pamietam to aby móc obsługiwać eventy np klikniecie na przycisk. W fxml musisz podpiąc jakiś kontroler do widoku w twoim przypadku SingleplayerInputPageController a nastepnie do buttonu przypisac funkcje która ma się wykonać(musi sie ona znajdować w klasie kontrolera).W fxml dodac  <Button ....... onAction="#metodaDoWykonania" ....../>

Mam nadzieje że to rozwjazuje to twój problem

komentarz 21 października 2016 przez K0XM4N Gaduła (3,640 p.)
Nie nie, zupełnie nie o to mi chodziło :P. Chciałem to zrobić w taki sposób, że wszystkie controlery odpowiedzialne za zdarzenia GUI byłyby utworzone w głównym kontrolerze, który by wszystko obsługiwał. Tak właśnie robiłem w swingu.
komentarz 26 października 2016 przez Mateusz51 Nałogowiec (28,180 p.)
Nie wiem czy zrozumiałem o co Ci naprawde chodzi.

Pojescie mvc wymusza ze każdy widok ma swoj kontroler. Ale przecież nic nie stoi na przeszkodzie abys tworzył jakiś obiekt pośredni miedzy kontrolerami i modelem. Np jeśli w dwoch widokach masz przycisk tworzenia gracza. To możesz zrobić obiekt PlayerDAO który udostepni metode tworzenia gracza. I w obu kontrolerach w funkcji obsugujacej zdarzenie klikniecia wywoałsz metode PlayerDAO.addPlayer(). Czy coś w tym stylu.

Podobne pytania

0 głosów
1 odpowiedź 1,686 wizyt
pytanie zadane 2 października 2018 w Java przez allenkun Początkujący (400 p.)
0 głosów
1 odpowiedź 443 wizyt
pytanie zadane 17 listopada 2018 w Java przez Amakesh Nowicjusz (220 p.)
0 głosów
2 odpowiedzi 721 wizyt
pytanie zadane 14 października 2018 w Java przez MarcinZielony Użytkownik (710 p.)

92,973 zapytań

141,937 odpowiedzi

321,173 komentarzy

62,301 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...