NOVINKA - Online rekvalifikační kurz Java programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!

Diskuze: Nové okno v JavaFX

V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
Petr Kasnal
Člen
Avatar
Petr Kasnal:20.2.2016 13:26

Zdarec lidi mám dotaz není to nic těžkého ale nechápu proč mi to nefugnuje. Je to úplně jednoduchý prográmek, který hned pochopíte. De o otevření nové stage a nevím proč nefunguje mi to.... Předem děkuju za každou pomoc :)

Odkaz na stažení programu: http://files.uloziste.com/…5d9c0e7bde7/

 
Odpovědět
20.2.2016 13:26
Avatar
pocitac770
Tvůrce
Avatar
Odpovídá na Petr Kasnal
pocitac770:20.2.2016 22:12

Tak snad nebudu říkat blbosti...
Když loaduješ .fxml soubor, tak se načte rozvržení okna z onoho souboru (v tvém případě FXMLDocument2­.fxml), a v něm je odkaz na třídu Controlleru (FXMLDocument2Con­troller). Po vytvoření se v něm zavolá metoda initialize(), která zajišťuje "přípravné práce" po vytvoření základního dokumentu. Protože nemáš ve třídě implementované rozhraní Initializable, tudíž tam ani nemáš onu metodu, tak se ti okno nemůže ani načíst. Spíš doporučuji používat předdefinované FXML soubory (v nabídce přidání souboru je možnost "Empty FXML", po zaškrtnutí jedné z možností se ti vygeneruje i Controller), jejichž okna budeš inicializovat z vnější třídy, jako to ty děláš zde přes metodu (což jsem ani moc nepochopil, jestli to vůbec jde včetně získání požadované instance Controlleru "obklikou"). I když já osobně používám

Parent root = FXMLLoader.load(getClass().getResource("Okno.fxml"));
 
Nahoru Odpovědět
20.2.2016 22:12
Avatar
Petr Kasnal
Člen
Avatar
Odpovídá na pocitac770
Petr Kasnal:20.2.2016 23:13

Takže se to dělá v initializable ? A jak to tedy bude vypadat ? Promin začínám v tom takže jsem trochu pomalejší, klidně mi sem pošli kód

 
Nahoru Odpovědět
20.2.2016 23:13
Avatar
Odpovídá na Petr Kasnal
Petr Štechmüller:20.2.2016 23:26

Ahoj, kdyby jsi alespoň trošku pogooglil, tak vyřešíš problém hned. Nevím, jak Netbeans zobrazuje chyby, ale v IntelliJ byla chyba vypsaná jasně:

javafx.fxml.LoadException: Controller value already specified.

Po vyhledání této vyjímky na googlu mi hned na prvním odkazu vylezlo řešení.
Řešení: Když ve druhém kontroleru definuješ kontroler pomocí metody:

fxmlLoader.setController(this);

tak nemůžeš mít tento kontroler definovanej ještě ve FXML dokumentu. Tedy v souboru

FXMLDocument2.fxml

musíš smazat toto:

fx:controller="zkouseniblbosti2.FXMLDocumentController2"

a vše bude fungovat správně.

To pocitac770 metoda initialize se implementuje pouze tehdy, když si usmyslíš, že chceš implementovat rozhraní Initializable a potřebuješ vykonat nějaké věci těsně po inicializaci okna. Toto rozhraní nehraje žádnou roli co se týče načítání okna.

Snad to pomohlo...

Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
Nahoru Odpovědět
20.2.2016 23:26
Pokud spolu kód a komentář nekorespondují, budou patrně oba chybné
Avatar
Petr Kasnal
Člen
Avatar
Odpovídá na Petr Štechmüller
Petr Kasnal:20.2.2016 23:36

Super diky moc funguje :) A hele nejde to ještě nějak jednodušeji klidně ? Já jsem todle vyplodil ve své hlavě :D

 
Nahoru Odpovědět
20.2.2016 23:36
Avatar
Odpovídá na Petr Kasnal
Petr Štechmüller:20.2.2016 23:44

Maximálně mně napadá si na to vytvořit nějakou statickou metodu v pomocný třídě, kterou budeš volat vždy, když chceš vytvořit nový okno. Nic jinyho mně nenapadá...
Btw, můžeš tu odpověď označit jako řešení tvého dotazu...

Nahoru Odpovědět
20.2.2016 23:44
Pokud spolu kód a komentář nekorespondují, budou patrně oba chybné
Avatar
Petr Kasnal
Člen
Avatar
Odpovídá na Petr Štechmüller
Petr Kasnal:20.2.2016 23:50

Jojo jasnačka já právě jenom jestli to nědelam blbě :p Díky moc za vyřešení mého problému :)

 
Nahoru Odpovědět
20.2.2016 23:50
Avatar
pocitac770
Tvůrce
Avatar
Odpovídá na Petr Štechmüller
pocitac770:21.2.2016 1:09

Neměl jsem zrovna po ruce IDE, a kouknul jsem se jen na zdroják, tak mě nenapadla až tak zvláštní chyba jako toto :D
A s tím Initializable... Právě jsem myslel, že se nutně automaticky volá při načtení... Tak alespoň zase o znalost víc, že to jde i bez toho :)

Editováno 21.2.2016 1:10
 
Nahoru Odpovědět
21.2.2016 1:09
Avatar
Odpovídá na pocitac770
Petr Štechmüller:21.2.2016 8:23

Jasný, zkus se podívat do zdrojaku javy, jak je to s tím initializable. Zjistís, že je tam nějaká podminka typu:

if(controller instanceof Initializable)
 volej nad kontrolerem metodu initialize
Nahoru Odpovědět
21.2.2016 8:23
Pokud spolu kód a komentář nekorespondují, budou patrně oba chybné
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 9.