- COMP.CS.140
- 12. Graafiset käyttöliittymät
- 12.2 JavaFX-kirjasto
JavaFX-kirjasto¶
JavaFX on ilmainen kirjasto graafisten käyttöliittymien toteuttamiseen Javalla.
JavaFX kehitettiin Javan vanhentuneiden AWT- ja Swing-kirjastojen korvaajaksi ja se olikin jonkin aikaa osa Java JDK:ta. JavaFX kuitenkin ulkoistettiin Oraclen toimesta avoimen lähdekoodin OpenJFX-projektiksi Javan 11. version yhteydessä.
Oraclen JavaFX-tutoriaali on edelleen hyödyllinen resurssi JavaFX-ohjelmia toteuttaessa. OpenJFX-projektin dokumentaatiosta löytyy muun muassa ohjeita JavaFX:n käyttöön eri ohjelmointityövälineiden kanssa.
Vaikka JavaFX on saatavilla erillisenä kirjastona,
on helpointa käyttää projektinhallintajärjestelmää ja IDE:ä. Tällä kurssilla toimitaan
juuri näin: NetBeansilla luodaan Maven-projekti, jonka pom.xml
-tiedostoon NetBeans
lisää automaattisesti tarvittavat määrittelyt JavaFX-riippuvuuksille ja -liitännäisille.
Kurssin materiaalissa NetBeansin JavaFX-projektit ovat pääosin moduulittomia ja tehdään yleensä
“yksinkertaisiksi” JavaFX-projekteiksi eli projekteiksi, joissa ei käytetä FXML-merkintäkieltä.
NetBeansissa JavaFX-ohjelman saa toteutettua tällaisena projektina valitsemalla
New Project | Simple JavaFX Maven Archetype
.
Päivitä NetBeansissa näin projektia luodessasi Additional creation properties
-kohdassa
javafx-version
-kentälle arvo 17.0.1
ja javafx-maven-plugin-version
-kentälle arvo
0.0.8
, joita tehtävien automaattitarkistaja käyttää. Versionumerot voivat olla uudempia,
jos tehtävässä ei ole automaattitarkistusta. Käytä edellä mainittuja versioita myös,
jos toteutat JavaFX-tehtävät jollain muulla IDE:llä tai täysin ilman IDE:ä.
JavaFX-projektin pom.xml
:ssä on riippuvuus JavaFX:lle. Esimerkiksi:
<dependencies>
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-controls</artifactId>
<version>17.0.1</version>
</dependency>
</dependencies>
Tämä riippuvuus riittää yksinkertaisissa projekteissa, koska Maven osaa päätellä itse kaikki muut tarvittavat JavaFX-riippuvuudet.
Lisäksi pom.xml
:ssä on määrittely JavaFX-Maven-liitännäiselle. Esimerkiksi:
<plugins>
<plugin>
<groupId>org.openjfx</groupId>
<artifactId>javafx-maven-plugin</artifactId>
<version>0.0.8</version>
<configuration>
<mainClass>package.MainClass</mainClass>
</configuration>
</plugin>
</plugins>
missä package.MainClass
on JavaFX-ohjelman määrittelevä luokka pakkausmääreineen.
Esimerkiksi alempana annetun JavaFX-esimerkin projektitiedostossa mainClass
-elementillä
tulisi olla arvo example.App
.
Huomaa, että NetBeans luo nbactions.xml
-tiedoston, jossa on tarvittavat määrittelyt
JavaFX-projektin ajamiseen ja debuggaamiseen NetBeansissa. Ohjelmoijan ei yleensä
tarvitse huolehtia tästä tiedostosta millään tavalla.
NetBeansilla tai muuden luodun Maven-hallitun JavaFX-projektin voi ajaa komentoriviltä
komennolla mvn javafx:run
.
Vaikka NetBeans populoi alustavan luokan valmiiksikin, alla on annettu itsekirjoitettuna lähes yksinkertaisin mahdollinen JavaFX-ohjelma:
package example;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
/**
* JavaFX App
*/
public class App extends Application {
@Override
public void start(Stage stage) {
// Setting the main window with a title
stage.setTitle("All the world's a stage");
// Show the main window
stage.show();
}
public static void main(String[] args) {
launch(args);
}
}
Lähdetään purkamaan ohjelman rakennetta ja katsotaan, mistä JavaFX-ohjelma oikeastaan koostuu.
JavaFX-ohjelman pääluokka erikoistaa javafx.application.Application
-luokkaa.
Kun ohjelma käynnistyy, ohjelman suoritus etenee pääluokan tasolla seuraavasti:
Application
-luokasta periytyvästäApp
-luokasta luodaan olio.Kutsutaan automaattisesti olion
init()
-metodia, jonka tehtävä on alustaa ohjelman tarvitsema tila ennen suorituksen alkua, esimerkiksi luoda tarvittavia olioita.Kutsutaan automaattisesti olion
start(Stage stage)
-metodia, joka toimii ohjelman alkupisteenä. Tälle metodille IDE antaa yleensä oletustoteutuksen, jota ohjelmoijan tulee sitten muokata tehtävään sopivaksi. Metodi saa parametrinaanjavafx.stage.Stage
-olion, joka määrittelee ohjelman pääikkunan.Show()
-metodin kutsuminenstage
:lle näyttää ikkunan ruudulla.Ohjelma jää kuuntelemaan tapahtumia. Pääluokka odottaa tässä kohtaa ohjelman sulkevaa tapahtumaa eli joko
Platform.exit()
:n kutsua tai sitä, että kaikki ohjelman ikkunat on suljettu jaPlatform
:lle on määriteltyimplicitExit
.Kutsutaan automaattisesti olion
stop()
-metodia.
On tärkeää huomioida, että start()
on Application
:ssa abstrakti ja se on siten toteutettava
Application
-luokasta perittävässä omassa JavaFX-sovellksessa. Init()
- ja stop()
-metodeille
on tarjolla tyhjät toteutukset.
Ohjelmamme ei vielä tee mitään. Lähdetään siis lisäämään toiminnallisuutta ikkunaan.