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

question-closed JavaFX Wymiana wartości zmiennych pomiędzy Kontrolerami

VPS Starter Arubacloud
0 głosów
867 wizyt
pytanie zadane 13 sierpnia 2018 w Java przez DanielKowalskiX Początkujący (460 p.)
zamknięte 13 sierpnia 2018 przez DanielKowalskiX
Witajcie!
Szukam sposobu na to, żeby mieć zmienną, z której korzystać będę przez całe funkcjonowanie programu, korzystając z różnych kontrolerów.
Nie mogę znaleźć odpowiedzi na pytanie czym powinienem się posłużyć, by było to możliwe.

Znacie jakiś sposób na to?
komentarz zamknięcia: Rozwiązano problem

3 odpowiedzi

0 głosów
odpowiedź 13 sierpnia 2018 przez miro Pasjonat (23,870 p.)
wybrane 13 sierpnia 2018 przez DanielKowalskiX
 
Najlepsza
Czy twoje kontrolery "obsługują" wyświetlanie widoków w tym samym czasie (np. obok siebie), czy przechodzisz z jednego do drugiego? Jak to drugie to może lepiej, abyś podawał wartość zmiennej przy tworzeniu Scene.

Nie wiem czy tak się robi, ale jak jest mało używana zmienna to można zapisywać jej wartość do bazy danych.
komentarz 13 sierpnia 2018 przez DanielKowalskiX Początkujący (460 p.)

Przechodzę z jednego do drugiego, póki co metodą:

StackPane.getChildren().clear();
StackPane.getChildren.add(InnyPane);

Być może jest na to lepsza metoda, jeszcze jej nie zdążyłem odkryć.
Ciężko by było tą metodą przerzucać wartości z jednego na drugi, dlatego myślałem, żeby stworzyć taki osobny kontroler przechowujący zmienne, które działają w trakcie całego programu i do niego się odwoływać.

Mógłbym zagnieździć całość w jeszcze jednym StackPane, by architektura wyglądała tak:

StackPane1
    | ----StackPane2
    |      |
    |      |----Pane1
    |      |----Pane2
    |      |----Pane3
    |
    |----PaneZeZmiennymi

Wówczas czyściłbym potomków StackPane2, a do kontenera PaneZeZmiennymi dołączyłbym Kotroller ze zmiennymi.
Jednak wydaje mi się, że to może być taka droga trochę na około, jak myślicie?

komentarz 13 sierpnia 2018 przez miro Pasjonat (23,870 p.)

stworzyć taki osobny kontroler przechowujący zmienne, które działają w trakcie całego programu i do niego się odwoływać.

Chcesz mieć 2 kontrolery do jednego widoku z czego jeden ma tylko przechowywać zmienne? Nie brzmi to za dobrze. To już lepiej zrobić ten Singleton, o którym była wcześniej mowa. 

Dawno się nie bawiłem z JavaFX, jednak chyba powinieneś zmieniać cały Scene w Stage, a nie usuwać i dodawać dzieci. Tutaj masz przykładową metodę, podmieniającą widok, która mogłaby znaleźć się w jakimś managerze widoków:

  public void showDrawCard(int id) {
        try {
            FXMLLoader loader = getLoader(DRAW_CARD_FXML);
            BorderPane borderPane = (BorderPane) loader.load();

            Scene scene = new Scene(borderPane);
            primaryStage.setTitle(bundle.getString("title.draw"));
            primaryStage.setScene(scene);

            DrawCardController controller = loader.getController();
            controller.setPrimaryStage(this.primaryStage);
            controller.setManager(this);
            controller.init(id);
            primaryStage.show();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

Masz 1 Stage i podmieniasz Sceny. Przez metodę init(), możesz przekazywać wartości. 

Tutaj masz przykładowy kod jak zmieniać sceny przykład

0 głosów
odpowiedź 13 sierpnia 2018 przez Wiciorny Ekspert (269,120 p.)
ale zmienna być globalna rozumiem? Ma przechowywać co dokładnie? Bo można by zrobić Singletonową klase mającą publiczne pole... " niezbyt rozsądne" i po prostu tylko 1 instacje tej klasy na kontener z polem statycznym wtedy ;] zawsze bedzie to zmienna należąca do klasy która bedzie wrapperem na tę globalna zmienną
komentarz 13 sierpnia 2018 przez DanielKowalskiX Początkujący (460 p.)
Potrzebuję trzech zmiennych przechowujących wartości int.
komentarz 13 sierpnia 2018 przez DanielKowalskiX Początkujący (460 p.)

Próbowałem ze zmiennymi globalnymi:

public class Global {
    public static final int liczba=5;
}

Potem odwołać się:

public int numer= Global.liczba;

Jednak tym sposobem mam stałą, której nie mogę zmieniać i to jest problem.

Co do enum to nie wiem jak mógłbym je tutaj dobrze zastosować.

komentarz 13 sierpnia 2018 przez miro Pasjonat (23,870 p.)

Jednak tym sposobem mam stałą, której nie mogę zmieniać i to jest problem. 

final int

komentarz 13 sierpnia 2018 przez DanielKowalskiX Początkujący (460 p.)
Nie za bardzo rozumiem Twoją odpowiedź.
komentarz 13 sierpnia 2018 przez miro Pasjonat (23,870 p.)
Poczytaj o słowie kluczowym final.
0 głosów
odpowiedź 13 sierpnia 2018 przez DanielKowalskiX Początkujący (460 p.)
Kombinowałem kombinowałem i trochę nieprofesjonalnie jeszcze ale znalazłem sposób.
Do mojego głównego StackPane, oprócz Pane'a z całym programem dorzuciłem jeszcze 3 label'e, które przechowują moje zmienne.
Dziękuję wszystkim  za odpowiedzi ;)

Podobne pytania

0 głosów
0 odpowiedzi 324 wizyt
pytanie zadane 8 maja 2019 w Java przez poldeeek Mądrala (5,980 p.)
0 głosów
2 odpowiedzi 134 wizyt
pytanie zadane 13 marca 2023 w Java przez elvis Nowicjusz (210 p.)
0 głosów
1 odpowiedź 217 wizyt
pytanie zadane 2 grudnia 2021 w Java przez DzikieHarce Użytkownik (690 p.)

92,454 zapytań

141,263 odpowiedzi

319,099 komentarzy

61,854 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.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...