NOVINKA - Online rekvalifikační kurz Python programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze – Lekce 7 - Upomínač narozenin v JavaFX - Propojení vrstev

Zpět

Upozorňujeme, že diskuze pod našimi online kurzy jsou nemoderované a primárně slouží k získávání zpětné vazby pro budoucí vylepšení kurzů. Pro studenty našich rekvalifikačních kurzů nabízíme možnost přímého kontaktu s lektory a studijním referentem pro osobní konzultace a podporu v rámci jejich studia. Toto je exkluzivní služba, která zajišťuje kvalitní a cílenou pomoc v případě jakýchkoli dotazů nebo projektů.

Komentáře
Avatar
pocitac770
Tvůrce
Avatar
Odpovídá na petr.fiala
pocitac770:9.7.2016 15:44

Nevím, co myslíš v tuto chvíli pojmem "View", ale tím spojením máš víceméně pravdu. FXML je pouhé zjednodušení FX, které umožňuje automaticky vykonat určité kusy kódu (které jsme si ručně definovali na příkladu v OsobaDialog) s pomocí XML souboru, kde jsou použité vlastnosti (velikosti, obsah, propojovací metody) definovány. Sice to tu nebylo ukázáno, ale i s pomocí FXML jde vytvořit více oken najednou propojených logikou, jako bylo u zdejšího příkladu.

Editováno 9.7.2016 15:45
 
Odpovědět
9.7.2016 15:44
Avatar
Jan Kocev
Člen
Avatar
Jan Kocev:14.4.2019 23:19

Zdravím.
Mohl bych v "ListView" vypsat místo jmen např. data narození?
Děkuji.

Odpovědět
14.4.2019 23:19
Aha, tak jinak.
Avatar
Jan Kocev
Člen
Avatar
Odpovídá na Jan Kocev
Jan Kocev:15.4.2019 0:42

Mno, to možná trochu předbíhám.
Z nějakého důvodu mi "ListView" místo jmen ukazuje nejspíš označení jednotlivých prvků (místo "Karel" se zobrazuje "nazev_projek­tu.CLASS@nahod­ny_cislo"). Může mi někdo poradit co s tím?

Odpovědět
15.4.2019 0:42
Aha, tak jinak.
Avatar
Jan Kunágl
Člen
Avatar
Jan Kunágl:27.1.2023 10:45

Pro mě některé věci nedostatečně vysvětlené. Např. nevysvětlená třída "Optional<Osoba>", dále není dobře vysvětleno proč Osobu vrací přepsaná metoda call (ButtonType parm) a její parametr, atd... V kurzu Java Swing, kde se programuje Upomínač narozenin také, mi bylo všechno jasnější.

 
Odpovědět
27.1.2023 10:45
Avatar
Odpovídá na Jan Kunágl
Petr Štechmüller:27.1.2023 12:42

Ahoj,
uznávám, že třída Optional tu nikde na síti vysvětlena není. Zjednodušeně řečeno se jedná o wrapper, který může a nemusí obsahovat hodnotu. Vychází to z nějakého "null-safety" paradigmatu, kde bys neměl vracet "null" hodnotu, protože ta může zapříčinit nechvalně známou vyjímku NullPointerEx­ception. Takže tím, že vrátíš Optional říkáš, že návratová hodnota může a nemusí být obsažena a je pak na volateli metody, aby to nějak ošetřil.

Co se týče druhého bud, předpokládám, že mluvíš o tomto kusu kódu:

dialog.setResultConverter(new Callback<ButtonType, Osoba>() {
    @Override
    public Osoba call(ButtonType param) {
        try {
            LocalDate narozeniny = Datum.naparsuj(datumTextField.getText());
            return new Osoba(jmenoTextField.getText(), narozeniny);
        } catch (DateTimeParseException | IllegalArgumentException ex) {
            System.out.println("Chyba: " + ex.getMessage());
            Alert alert = new Alert(AlertType.ERROR, "Osobu se nepodařilo naparsovat!");
            alert.showAndWait();
            return null;
        }
    }
});

Vezmu to od začátku. V JavaFX může dialog vracet nějakou hodnotu. Tato hodnota je definována při vytváření instance dialogu:

Dialog<Osoba> dialog = new Dialog<>();

V tomto případě bude návratová hodnota typu Osoba. Jenže, v dialogu zobrazujeme pouze jméno a datum narození. To jsou vlastně jen dva inputy.

Tak a teď, abys dodržel typ návratové hodnoty, tak musíš někde vytvořit instanci třídy Osoba. Tady je to dělané tak, že po kliknutí na tlačítko Ok, se dialog potvrdí a mimo dalších věcí se zavolá (pokud je definovaný) result converter. To je callback, který má za úkol jedinou věc, transformovat inputy jméno a datum na instanci třídy Osoba. A to přesně dělá ten kód.

Snad jsem to vysvětlil dostatečně srozumitelně. Pokud ne, tak se ptej dál :)

Odpovědět
27.1.2023 12:42
Pokud spolu kód a komentář nekorespondují, budou patrně oba chybné
Avatar
Jan Kunágl
Člen
Avatar
Odpovídá na Petr Štechmüller
Jan Kunágl:27.1.2023 13:25

Děkuji za odpověď a vysvětlení. Je dostatečné. Jenom si ho ještě párkrát přečtu a bude to z mé strany na 100% :)

 
Odpovědět
27.1.2023 13:25
Avatar
cepela
Člen
Avatar
Odpovídá na Jan Kunágl
cepela:28.1.2024 23:43

Ten Optional je popisovaný někde u OOP nebo Kolekcí, teď si přesně nevybavím.

 
Odpovědět
28.1.2024 23:43
Avatar
cepela
Člen
Avatar
cepela:28.1.2024 23:46

Nějak nemohu přijít na to, proč se mi všechny všechny typy výjimek jak v konzoli, tak v alertu zobrazí vždy dvakrát po sobě...

 
Odpovědět
28.1.2024 23:46
Avatar
David Maňák:16. února 17:01

Vůbec není vysvětlena v článku tato část:

...
dialog.setResul­tConverter(new Callback<Button­Type, Osoba>() {
@Override
public Osoba call(ButtonType param) {
...

  • metoda setResultConverter a její parametr třída CallBack - co to je, proč a jak to funguje
  • metoda call, její parametr, odkud se volá
 
Odpovědět
16. února 17:01
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 9 zpráv z 19.