Mikuláš je tu! Získaj 90 % extra kreditov ZADARMO s promo kódom CERTIK90 pri nákupe od 1 199 kreditov. Len do nedele 7. 12. 2025! Zisti viac:
NOVINKA: Najžiadanejšie rekvalifikačné kurzy teraz s 50% zľavou + kurz AI ZADARMO. Nečakaj, táto ponuka dlho nevydrží! Zisti viac:

Diskusia – 7. diel - PRIPOMIENKOVÉ narodenín v JavaFX - Prepojenie vrstiev

Späť

Upozorňujeme, že diskusie pod našimi online kurzami sú nemoderované a primárne slúžia na získavanie spätnej väzby pre budúce vylepšenie kurzov. Pre študentov našich rekvalifikačných kurzov ponúkame možnosť priameho kontaktu s lektormi a študijným referentom pre osobné konzultácie a podporu v rámci ich štúdia. Toto je exkluzívna služba, ktorá zaisťuje kvalitnú a cielenú pomoc v prípade akýchkoľvek otázok alebo projektov.

Komentáre
Posledné komentáre sú na spodnej časti poslednej stránky.
Avatar
pocitac770
Tvůrce
Avatar
Odpovedá 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.

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

Odpovedať
Aha, tak jinak.
Avatar
Jan Kocev
Člen
Avatar
Odpovedá 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?

Odpovedať
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ší.

Avatar
Odpovedá 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 :)

Odpovedať
Pokud spolu kód a komentář nekorespondují, budou patrně oba chybné
Avatar
Jan Kunágl
Člen
Avatar
Odpovedá 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% :)

Avatar
cepela
Člen
Avatar
Odpovedá 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.

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

Avatar
David Maňák:16. februára 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á
Posledné komentáre sú na spodnej časti poslednej stránky.
Robíme čo je v našich silách, aby bola tunajšia diskusia čo najkvalitnejšia. Preto do nej tiež môžu prispievať len registrovaní členovia. Pre zapojenie sa do diskusie sa zaloguj. Ak ešte nemáš účet, zaregistruj sa, je to zadarmo.

Zobrazené 9 správy z 19.