...
I KalkulatorController.java:
@FXML brukes for å gi FXML-en lov til å kalle metoden, mens void betyr at metoden ikke skal returnere noen verdi. event-parameteret (av typen ActionEvent) inneholder informasjon om hendelsen. F.eks. kan en hente ut hvilken knapp som ble trykket med event.getSource(). Her skriver vi ut denne verdien, for å sjekke at det virker som det skal. Hvis det ikke er viktig å vite hvilken knapp som ble trykket (f.eks. hvis den bare kalles av én knapp), så trenger du ikke ha med event-parameteret i metoden. | I KalkulatorApp.fxml
Både 1- og 2-knappen har onAction="#handleDigitButton", så for begge disse vil handleDigitButton blir kalt når de trykkes på. |
...
For at KalkulatorController-koden skal ha en synlig effekt, så må den kunne endre på elementene som vises i app-vinduet. F.eks. så ønsker jo vi å endre på teksten som vises i tekstfeltet. For å få det til, så må en ha én eller flere variabler som peker på elementer i KalkulatorApp.fxml-fila og få satt disse automagisk når FXML-fila lastes inn. Trikset er igjen å legge inn kode både i KalkulatorController og KalkulatorApp.fxml. I dette tilfellet deklarerer man en variabel i KalkulatorController og legger in et fx:id-attributt i KalkulatorApp.fxml. Typen og navn til variabelen må stemme med typen FXML-element og fx:id-en.
I KalkulatorController.java:
@FXML brukes her for å gi FXML-en lov til å sette variabelen. Typen TextField stemmer med FXML-elementet og navnet "valueText" stemmer med fx:id-verdien. Koden i handleDigitButton er endret, slik at den først henter ut knappen med event.getSource()og så setter teksten til tekstfeltet til knappens tekst med valueText.setText(button.getText()). | I KalkulatorApp.fxml
Tekstfeltet har fått en fx:id som stemmer med variabel-navnet. Også typen TextField stemmer med FXML-koden for tekstfeltet. |
Prøv å gjøre endringene vist over, kjør koden og se om teksten tekstfeltet endres når du trykker på tall-knappene. handleDigitButton-metoden.
Hva har du lært?
- å koble FXML-koden til Java-koden med fx:id- og onAction-attributter
...