Excerpt |
---|
Dette eksemplet viser hvordan man kan skriver Java-kode koblet til en FXML-fil med skjermbilde-innholdet. |
I dette programmet trenger vi to filer: FXML-fila med skjerminnholdet og Java-fila med koden som er koblet til FXML-en. Jeg har tegnet bildet med Scene Builder, og justerte litt på FXML-en i editoren etterpå, for å legge til et punkt i Polygon-objektet (som først var en trekant). Bildet ser du under til venstre, og FXML-koden er til høyre. Hvis du kopierer FXML-koden inn i Eclipse og åpner Preview-panelet med Window->Show view->Other..., så vil du se det samme bildet.
|
Litt om FXML-en
De fleste linjene tilsvarer en liten del av bildet. F.eks. er hodet en sirkel som lages med Circle-elementet. Plasseringen styres av layoutX- og layoutY-attributtene og utseendet av attributter som stroke, strokeType og fill. Hvis du kopierer FXML-en inn i Eclipse og endrer litt på disse, så ser du fort hva slags effekt de har. Øverst/ytterst har vi en AnchorPane, som gjør det lett å plassere elementer på bestemte koordinater. Navn som Circle og Anchor er egentlig navn på Java-klasser, som er litt lenger. F.eks. heter AnchorPane egentlig javafx.scene.layout.AnchorPane og Circle heter egentlig javafx.scene.shape.Circle. For å slippe å skrive så lange navn, så bruker man <?import ...> øverst i fila.
To viktige deler av FXML-fila er fx:id-attributtet og attributter som begynner med "on", f.eks. onAction-attributtet i Button-elementet.Her en liten oppskrift på hvordan GUI-delen av programmet programmeres:
fx:id-attributt og Java-variabel
Alle delene av skjermbildet som programmet skal kunne forandre på, f.eks. gjøre synlig eller usynlig, endre teksten eller posisjonen til osv. må ha en fx:id. Denne du legge inn med Scene Builder eller FXML-editoren. I FXML-en kan f.eks. se slik utover er dette brukt til å sette navn på Polygon-objektet som tilsvarer den grå knivaktige tingen i hånda på strekmannen:
Code Block |
---|
<Text<Polygon fx:id="statusTextkniv" .../> |
I Java-koden må du lage en variabel med samme navn som denne fx:id-en, og typen til variablen må tilsvare typen element, f.eks Polygon for mangekant Text for tekst, Line for strek:
Code Block |
---|
@FXML TextPolygon statusTextkniv; |
Du kan selvfølgelig lage andre varibler variabler også, for å holde rede på alt som trengs for å få spillet til å virke.
Java-metode og onHendelse-attributt
Alt brukeren gjør og som programmet skal reagere på, må gjøres av en hendelsesmetode (samme som funksjon i Python). I FXML-en må du legge inn navnet på denne metoden i det samme elementet som skal trigge metoden og med # foran. Hvis Dette eksempel-programmet skal reagere på en knappknappen, så da må f.eks. FXML-en se slik ut (fx:id-attributtet er for at koden skal kunne endre på teksten i knappen):
Code Block |
---|
<Button fx:id="trykkHerKnapp" onAction="#handleTrykkHer" text="#herErNavnetPåMetodenTrykk her!" .../> |
I Java-koden må metoden se slik ut:
Code Block |
---|
@FXML void herErNavnetPåMetodenhandleTrykkHer() { // her legges koden for det som skal skje } |
I koden i hendelsesmetodene så kan en bruke variablene for elementene som har fx:id-attributter, til å endre på skjermbildet, og dermed skape liv i skjermbildet! Hvis statusText er definert som vist over, så kan du f.eks. skrive statusText.setText("Melding fra programmet: ..."), for å gi en beskjed til brukeren.
...