JavaFX työkalujen asennus
Kohdan 1:50 tietämillä vaihdetaan compiler compliance level kohdasta 11 kohtaan 17. Minä vaihdoin sen itselle kohtaan 21. Eli oletuksena se oli minulla kohdassa 17. Varmaan muillakin.
—1. JavaFX
JavaFX on yksi Javaan tarjolla olevia kirjastoja tehdä graafisia käyttöliittymiä. Muita ovat mm. AWT, Swing ja SWT. Kurssilla käytetään nykyisin JavaFX:ää, koska se muistuttaa eniten mm. Windows-puolen WPF-kirjastoa (mutta valitettavasti huonommin työkaluin).
Tämä edellyttää että on tehty ohjeiden mukaan oma Java JDK jossa on JavaFX mukana
1.1 Eclipseen JRE jossa JavaFX mukana
Tämä tehtiin Eclipsen asennusohjeen kohdassa: Java 22 JRE tarkistaminen/lisääminen.
Varoitus: jdk-22-JavaFX
kohdassa pystyi valitsemaan vain yhden dokumentaationta kerrallaan. Jatkossa pitää selaimella etsiä https://openjfx.io/javadoc/17/
HUOM! Muista aina jatkossa projektia tehdessä tarkistaa, että JRE-kohdassa on tämä JDK!
1.2 Mistä tiedän että toimii?
Luo uusi Eclipsen Java projekti:
File/New/Java Project
- Project name:
hellofx
- Location:
c:\kurssit\ohj2\hellofx
- Valitse
Use default JRE
(videossa en ruksinut tätä) ja katso huolella että kohdassa lukee edellä luomasi:jdk-22-JavaFX
. Jos ei lue, niin valitseUse project specific JRE:
ja etsi se siihen. - Module: Poista valinta
Create module-info.java file
Finish
Tee uusi Eclipse Java-luokka:
- Klikkaa uusi projektisi aktiiviseksi.
File/New/Class
- Package:
fxHello
- Name:
HelloWorld
Finish
Katso että
HelloWorld.java
n pakettifxHello
onsrc
hakemiston alla.
Eihän vaan ole tiedostoa
module-info.java
? Jos on, poista se.Kopioi tiedoston
HelloWorld
sisällöksi:package fxHello; import javafx.application.Application; import javafx.scene.Scene; import javafx.scene.control.Button; import javafx.scene.layout.BorderPane; import javafx.stage.Stage; /** * Yksinkertainen esimerkki JavaFX ohjelmasta * @author vesal * @version 4.3.2016 */ public class HelloWorld extends Application { @Override public void start(Stage primaryStage) { BorderPane root = new BorderPane(); Button button = new Button("Moi!"); root.setCenter(button); Scene scene = new Scene(root); primaryStage.setScene(scene); primaryStage.show(); } /** @param args ei käytössä */ public static void main(String[] args) { launch(args); } }
Mitään ei saa olla punaisella tai keltaisella!
Run/Run
Pitäisi aueta pieni ikkuna, jossa lukee
Moi!
. Jos haluat isomman ikkunan pidennäButton
-komponentin sanaa.
1.3 Miten saan toimimaan
JavaFX Mac OS X SDK 11.0.2 aiheuttaa virheen
CoreText note: Client requested name “.SFNS-Regular”, it will get Times-Roman rather than the intended font. All system UI font access should be through proper APIs such as CTFontCreateUIFontForLanguage() or +[NSFont systemFontOfSize:]
Ratkaisu on asentaa versio 11.0.12 (LTS) tai 17 (LTS), joka julkaistiin kurssin aikana.
Näkyy vain tyhjä ikkuna
Root-elementin on hyvä olla muuta kuin label. Macin (10.15) tapauksessa labelin teksti ei jostain syystä tullut näkyviin. Harjoitustyössä käytetään usein pohjana
javafx.scene.layout.BorderPane
Ongelma ei varmaankaan tule enää vastaan työkalujen asentamisen jälkeen.
Jos ei toimi, niin katso että asetukset (eli hiiren oikealla projekin nimen
hellofx
päällä jaProperties
) ovat seuraavasti:
Kun lisään ModulePathiin JRE System Libraryn, se siirtää sen automaattisesti Classpathiin, jonka jälkeen tulee valitus ettei modulepathissa ole mitään. Täytyy itse lisätä external Jars modulepathiin, jotta toimisi ohjelma
HL: Poista module-info.java-tiedosto ja siirrä kaikki asiat Classpathiin.
—2. e(fx)clipse
Eclipsen e(fx)clipse
-laajennus tuo Eclipseen työkaluja JavaFX-ohjelmien kirjoittamiseen.
Huom. Nämä ohjeet Eclipsen versiolle 2024-09 tai uudemmalle.
Asenna Eclipsen e(fx)clipse (3.8.0) päivitys tukemaan Java 22
- Avaa Eclipse (Mikroluokissa voit käynnistää myös komentoriviltä komennolla:
ee2012
.) - Valitse menusta
Help/Eclipse Marketplace
:- Etsi
e(fx)clipse
- Valitse
e(fx)clipse 3.8.0
- Install
- Painele OK/Next ja hyväksy tarvittavat lisenssiehdot.
- Etsi
- Lopuksi muista odottaa tarpeeksi kauan (seuraa alareunasta asennuksen edistymistä), että ehtii asentua. Ensin haetaan asennuspaketti ja sitten ruvetaan asentamaan ja sen edistyminen näkyy oikeassa alanurkassa ja se kestää... Tarvittaessa ruksi että luotat lähteeseen. Lopuksi pitää odottaa Eclipsen kysymysikkuna, että sen saa käynnistää uudelleen.
Varmistu siitä, että edelliset vaiheet ovat kunnossa. Muuten Eclipse voi kaatua, eikä enää käynnisty.
En löytänyt näillä ohjeilla versiota 3.9.0, eikä myöskään netistä löytynyt mitään latauslinkkejä. Asensin version 3.8.0, jos olisi löytynyt päivityslinkkiä, mutta ei lykkyä. Versiolla 3.8.0 kuitenkin toi kohta 2.1 on OK. Onko versio 3.9.0 välttämätön?
VL: EI kais sillä väliä jos toimii.
DZ: Palautin ohjeeseen 3.8.0, sillä 3.9.0 ei edes ole vielä Eclipsen marketplacessa
—2.1 Mistä tiedän että toimii
- Ota Eclipsessä
File/New/Other/
- Jos löytyy kohta
JavaFX
ja sen altaJavaFX Project
✅ Nyt saat ruksia asennetuksi kohdan: e(fx)clipse.
Jee, asennetaan seuraavaksi SceneBuilder…
Ensin en saanut JavaFX-kohtaa näkymään e(fx)clipsen asennuksen jälkeen. Ilmeisesti edellisen ohjeen kohdan 4. jälkeen täytyy odottaa, että Eclipse kysyy pop-up-ikkunassa uudelleenkäynnistystä IDE:n muutosten vuoksi, mikä täytyy hyväksyä (manuaalinen restart ei toiminut ennen viestiä). Tämän kysymyksen ilmestymisessä kesti jonkin aikaa enkä sitä ensimmäisellä kerralla ymmärtänyt odottaa. Ongelma ratkesi kun uudelleenkäynnistin Eclipsen ja toistin e(fx)clipsen asennuksen, ja huomasin tuon pop-up-ikkunan.
—e(fx)clipsen asentumisessa menee hetki, Eclipsen alaoikealla näkyy progress bar. Odottele siis rauhassa! OH
—Minulla on intel Mac ja olen asentanut ohjeiden mukaan Javan. Asensin myös tämän e(fx)clipsen, mutta tuo JavaFX ei jostain syystä tule näkyviin Eclipsen preferensseihin eikä myöskään File/New/Other kohtaan. Onko veikkausta, missä voisi olla vika? (Olen kokeillut poistaa ja asentaa e(fx)clipsen uudelleen marketplacesta)
VL: Toimiikos edes jos tekee projektin sillä FXMLPackege.jar:illa. Pieni mahdollisuus on sekin, että olet sitä omaa JDK:ta tehdessä valinnut väärän JavaFX-version.
Tuo FXMLPackage.jar toimii niin kuin ohjeissa on eli pystyn tekemään sillä jo olemassa olevaan projektiin JavaFX-projektin src folderiin.
VL: Eiköhän tuolla pärjää sitten.
—3. SceneBuilder
SceneBuilder on työkalu tuottaa JavaFX:ässä käytettyä ulkoasun esittämismuotoa, eli .fxml
-tiedostoja. Näitä tiedostoja voidaan aivan hyvin tehdä millä tahansa tekstieditorilla, ja siis myös Eclipsellä. Ja usein tekstimuotoista muokkaamista käytetäänkin, koska se on nopeampaa kuin hiirellä klikkailu. Mutta siihen asti kunnes kieleen pääsee sisälle, voi olla helpointa ainakin aloittaa uudet käyttöliittymät tuottamalla ensimmäiset .fxml
-tiedosto graafisella työkalulla. Ja SceneBuilder on yksi tähän välttävästi sopiva työkalu (välttävästi tarkoittaa tässä ettei se alkuunkaan vedä vertoja Microsoftin Visual Studion tai Blendin tasoisille työkaluille).
Seuraavassa on ohjeet SceneBuilderin asentamiseen.
Jos sinulla on omassa koneessasi vanha SceneBuilder, niin tee sille
uninstall
ja poista kaikki siihen liittyvät tiedostot aluksi.
3.1 Asentaminen
Valitse Gluonin SceneBuilder-lataussivulla oikea käyttöjärjestelmä kohdasta SceneBuilder-21.0.0 (videolla taisin valita väärästä) lataa asennustiedostot ja asenna SceneBuilder. Windows saattaa antaa suojausvaroituksen.
Windows: Voit asentaa muuhunkin kuin oletushakemistoon, esimerkiksi:
C:\devel\SceneBuilder
OS X: Pudota normaalisti Ohjelmat/Applications -kansioon.
Debian-pohjaisissa Linuxeissa (esim. Ubuntu) paras tapa asentaa on avata ladattu tiedosto Software Center:lla. Vaihtoehtoisesti alla olevat komennot voi syöttää terminaaliin.
sudo dpkg -i SceneBuilder*.deb
Fedora/CentOS (esim. Red Hat Enterprise Linux) käyttää
sudo rpm -i SceneBuilder*.rpm
tai vaihtoehtoisesti voi extractata SceneBuilderin .rpm-tiedostosta toimimaan standalonena (ei kokeiltu)
sudo dpkg -i scenebuilder-9.0.1.deb sudo apt-get -f install
Arch Linuxin tapauksessa voit tehdä
git clone https://aur.archlinux.org/javafx-scenebuilder.git makepkg -sr sudo pacman -U javafx-scenebuilder*.pkg.tar.zst
Asennuksen jälkeen avaa Eclipse ja hyväksy kysymys Workspacen käytöstä.
Siirry Eclipsen valikkoriviltä asetuksiin ja siellä JavaFX-kohtaan:
- Windows:
Window/Preferences/JavaFX
- OS X:
Eclipse/Asetukset/JavaFX
- Linux:
Window/Preferences/JavaFX
- Windows:
Kirjoita
SceneBuilder executable
-kenttään SceneBuilder asennuksen sijainti:- Windows:
- Mahdollisesti
C:\Program Files\SceneBuilder\SceneBuilder.exe
, tai C:\Users\OMATUNNUS\AppData\Local\SceneBuilder\SceneBuilder.exe
- tai
C:\devel\SceneBuilder\SceneBuilder.exe
jos teit asennuksen sinne. - Huomaa että nimi pitää nimenomaan olla
SceneBuilder.exe
, eli se asennettu versio, ei se sivuilta ladattu asennuspaketti.
- Mahdollisesti
- OS X:
/Applications/SceneBuilder.app
- Linux:
/opt/scenebuilder/bin/SceneBuilder
- Windows:
Jätä
JavaFX 11+ SDK
kenttä tyhjäksi (joillakin videoilla siihen on laitettu muuta, mutta ÄLÄ LAITA)
Jos löytyy vain SceneBuilderin versio 20, sopiiko se vai mistä versio 19 löytyy?
—Mitä teen kun mulla ei lue Preferences valikossa JavaFX?
DZ: Asensitko e(fx)clipse-liitännäisen tämän ohjeen luvun 2 mukaisesti? Tarkista luvun 2.1 mukaisesti, että sinulla on liitännäinen asennettu ja toiminnassa. Voit myös avata Eclipse Marketplace (Help > Eclipse Marketplace) ja katsoa, löytyykö plugin Installed -välilehdestä
—voiko asentaa 22.0.0 ? tai mistä löydän sen vanhemman version sitten?
—3.2 Mistä tiedän että toimii?
Luo uusi JavaFX-projekti:
File/New/Other.../JavaFX/JavaFX Project
- Next
- Project name:
scene
- Location:
.../ohj2/scene
(siis...
tilalle mihin pistit edellisiäkin projekteja) - JRE:
Use default JRE 'jdk-22-JavaFX' and workspace compiler preferences
- Poista ruksi:
Create module-info.java file
- Next
- Next
- Application type:
Desktop
- Package Name:
application
- Language:
FXML
- Root-Type:
javafx.scene.layout.BorderPane
- File Name:
Sample
- Controller Name:
SampleController
- Finish
Kokeillaan kääntyykö projekti:
- Poista
module-info.java
tiedosto, jostain syystä Eclipse haluaa välttämättä sellaisen tehdä. - Jos on puniasta tiedostossa
SampleController.java
, niin lisää sen riville 4 kommentti//
- (Poista
JavaFX SDK
projektin asetuksista (hiiren oikea projektin nimen päällä,Java Build Path
jaJavaFX SDK pois)
) - Näiden kanssa ei tarvitse myöhemmin enää painia sitten kun on asentanut kursiin FXMLPackage.jar-paketin. Silloin voi tehdä tavallisen Java Projektin.
- Avaa
Main.java
ja aja ohjelma, pitäisi avautua tyhjä ikkuna.
- Poista
Käynnistetään SceneBuilder:
- Valitse
Sample.fxml
-tiedosto hiiren oikealla painikkeella ja valitseOpen with SceneBuilder
. - Pitäisi avata SceneBuilder-ohjelma uuteen ikkunaan ja yläpalkissa lukea
Sample.fxml
. - Lisätään ruudun keskelle yksi painike (
Button
) vasemmastaControls-valikosta
. - Tallennetaan muutokset
File/Save
taiCtrl+S
. - Pitäisi näkyä ylälaidassa viesti
Changes saved to 'Sample.fxml'
. - Suljetaan SceneBuilder.
Huom! e(fx)clipsen asentamisen ainoa hyöty on tuo
Open with SceneBuilder
valikko. JavaFX-projektin tekeminen kannattaa tehdä jatkossa FXMLPackage.jar avulla.- Valitse
Kokeillaan uudelleen kääntyykö projekti:
- Jos muokkaat lähdekooditiedostoa Eclipsen ulkopuolella SceneBuilderissa, täytyy muistaa päivittää projekti ulkopuolisten muutoksien takia.
- Hiiren oikealla projektin
scene
kohdaltaRefresh
taiF5
. - Aja ohjelma. Pitäisi näkyä äsken lisätty painike.
Muistio: JavaFX SDK asettamisen jälkeen JavaFX-projekti pitäisi toimia suoraan module.info
-tiedoston kanssa.
Jee! Jos tulit tänne Eclipsen asennusvaiheesta, niin voit mennä takaisin jatkamaan asetusten säätöä.
Nice to know: Jos ihmettelit, miksei SceneBuilderia ladattu Oraclen sivuilta, niin Oracle jakelee nykyisin vain SceneBuilderin lähdekoodia, ja Gluon on hyvä lähde valmiiksi käännetylle versiolle.
These are the current permissions for this document; please modify if needed. You can always modify these permissions from the manage page.