wiki:JavaFX
Last modified 3 years ago Last modified on 2015-01-13 15:58:34

JavaFX

Asennus

Olethan asentanut Eclipsen, JavaFX:n ja SceneBuilderin ohjeiden mukaisesti.

Aloittaminen

Hyvä aloitustutoriaal JavaFX:n käyttämiseen löytyy sivulta JavaFX tutoriaali, se on tosin englanninkielinen. Siitä saa hyvän pohjan JavaFX:n kanssa työskentelyyn.

JavaFX kehitykseen pääsee käsiksi luomalla uuden JavaFX projektin Eclipsessä. Valitse File -> New -> Other... -> Kirjoita hakukenttään: JavaFx project ja valitse se valikosta. Syötä projektille haluttu nimi ja mene kaksi kertaa eteenpäin projektinluonti-ikkunassa.

Viimeisessä välilehdessä kysytään haluttua UI-ratkaisua.

Normaalisti valinta on asetettu None:lle, mutta vaihda se kuvan osoittamalla tavalla FXML:ksi. Voit vaihtaa File Name kohtaan kuvaavamman nimen kuten MainWindow tai Paaikkuna ja Controller Name kohtaan MainController tai Paakontrolleri.

Paina Finish nappulaa.

SceneBuilder

Etsi projektiselaimesta (Project explorer) luomasi .fxml tiedosto ja klikkaa sitä hiiren oikealla näppäimellä. Valitse "Open with SceneBuilder".

Jos .fxml-tiedostoa ei löydy, esimerkiksi koska se jäi luomatta projektin luonnissa, voit klikata application pakettia ja valita New -> Other... -> etsi: fx. Valitse New FXML Document.

Jos Eclipse valittaa jotakin, että polku on asetettu väärin !Scenebuilderille ja pyytää tarkistamaan sen, luultavastikkin syy on siinä, ettei SceneBuilderia ole ollenkaan asennettu.

SceneBuilderissa? voit vetää erilaisia komponentteja ruudun keskelle rakentelualueelle.

Huomaa, että esimerkiksi Controller, Code ja Layout näkymät näkyvät hädintuskin pienemmillä näytöillä ja helposti hukkuvat aukiolevien välilehtien alle, mikäli ikkuna ei ole suurennettuna.

Kun olet saanut komponentteja lisättyä sovellukseesi, voit ruveta yhdistämään niitä Java-koodiin. Mene Controller-luokkaasi (.java-tiedosto) ja lisää sinne jotakin komponenttia vastaava luokka attribuutiksi. Katso esimerkkiä allaolevasta kuvasta.

Lisää kuvanmukaisesti teksti Controller-luokkaasi

@FXML
private ListView<String> listaAsioista;

@FXML tagi antaa SceneBuilderille mahdollisuuden käsitellä tagilla varustettua komponenttia, vaikka se onkin private.

Valitse sitten !Controller-osio SceneBuilderissa ja ControllerClass kohdassa menusta valitse luomasi controller-luokka, mikäli se ei ole jo valittuna.

Tämän jälkeen avaa Code-välilehti SceneBuilderissa ja klikkaa fx:id:n pudotusvalikkoa ja valitse sieltä listaAsioista (tai muu oma tekemäsi nimi). Tämä tarkoittaa sitä, että SceneBuilderissa? luotu lista on nyt Controller-luokassa käytettävissä. Siihen pystyy nyt esimerkiksi Java-koodilla lisäämään tekstiä.

Tekstiä listaan

Seuraavaksi lisäämme listaan jotain tekstiä.

Lisää seuraavanlainen koodin pätkä controller-luokkaan

        public void initialize(){
                ObservableList<String> asioita = FXCollections.observableArrayList();
                asioita.add("Muffinit");
                asioita.add("Jauheliha");
                
                listaAsioista.setItems(asioita);
        }

initialize on aliohjelma, joka suoritetaan heti käynnistymisen yhteydessä automaattisesti. Sinne voi laittaa erilaisia tapahtumia, kuten listojen sisällön lataamisen tiedostosta.

Esimerkissä teemme uuden ObservableList?-tietorakenteen, johon sanomme laittavamme String-tyypin muuttujia <, > - merkeillä. Tämän jälkeen lisäämme listaan .add-metodilla kaksi asiaa, Muffinit ja Jauhelihan. Tämän lisäksi asetamme tuon juuri luodun tietorakenteen näytöllä näkyvään listaan .setItem-metodilla. Vastaavan voisi toteuttaa myös seuraavalla tavalla:

        public void initialize(){
                ObservableList<String> asioita = listaAsioista.getItems();
                asioita.add("Muffinit");
                asioita.add("Jauheliha");
        }

Tässä kysymme listalta sen nykyisen tietorakenteen ja lisäämme siihen kaksi uutta asiaa.

NullPointerException käynnistettäessä

Ongelmia tässä kohdassa aiheuttaa esimerkiksi SceneBuilderin ja Eclipsen välinen yhteys. Pyri tallentamaan mahdollisimman usein muutoksia tehdessäsi. Jos kuitenkin käynnistettäessä tulee NullPointerException, sulje !Scenebuilder ja aseta fx:id uudestaan listalle, sillä se saattaa olla asettamatta uudestaan käynnistäessä.

Attachments