Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

  • Ett felt pr. JavaFX-objekt en vil ha tak i, gjerne med samme navn id-en, f.eks. Circle headCircle;
  • En initialiseringsmetode (enten start-metoden selv eller en egen initialize-metode) med én linje pr. felt/objekt, hvor en slår opp objektet med lookup-metoden og setter feltet, f.eks. headCircle = (Circle) rootNode.lookup("#headCircle").

...

  • FXML-fila må lastes inn av et eget FXMLLoader-objekt, som må få vite hvilket objekt som håndteres av automatikken. Dette objektet fungerer som såkalt kontroller og settes med setController-metoden, f.eks. slik (hentet fra eksempel-koden lenger . For små applikasjoner, så brukes gjerne applikasjonsobjektet selv, som i koden under hvor this brukes som argument.

  • Feltene som skal settes automatisk  annoteres med @FXML, så det er tydelig at feltet skal håndteres av automatikken. Merk at automatikken utføres som en del av kallet til FXMLLoader sin load-metode, så en kan ikke referere til de @FXML-annoterte feltene før load-kallet er utført.

Her er eksempel-kode som viser dette i praksis (komplett kode er vist lengre ned):

Code Block
public class StickMan2 extends Application {
    @Override
    public void start(Stage primaryStage) throws IOException {
        FXMLLoader fxmlLoader = new FXMLLoader();
        fxmlLoader.setController(this);
        Parent root = (Parent) fxmlLoader.load(this.getClass().getResourceAsStream("StickMan2.fxml"));

...


        primaryStage.setScene(new Scene(root));
        primaryStage.show();
    }
	...
    @FXML Node stickMan, armsAndLegs1, armsAndLegs2;
    @FXML Shape eye;
	...
}

Reagere på input fra brukeren

Standard-teknikken for å håndtering av interaktive elementer er bruk av såkalte lyttere, som er (ofte egne) objekter med metoder som kalles når noe bestemt skjer, f.eks. at en bruker trykker en knapp. Denne teknikken er litt omstendelig (vi viser ikke eksempler her), så også her tilbyr FXML litt automatisering. Tanken er at det samme kontroller-objektet som settes med setController-metoden, også brukes som lytter, dvs. inneholder metoder som automatisk skal kalles ved gitte hendelser, som musklikk og tastetrykk. Denne automatikken ligner på bruken av FXML-id-er og felt, ved at den også er en kombinasjon av FXML-attributter og @FXML-annotering av Java-elementer:

...

Feltene som skal settes automatisk  annoteres med @FXML, så det er tydelig at feltet skal håndteres av automatikken, f.eks.

Code Block
@FXML Circle headCircle;

Merk at automatikken utføres som en del av kallet til FXMLLoader sin load-metode, så en kan ikke referere til de @FXML-annoterte feltene før load-kallet er utført.

...