...
Code Block |
---|
language | javafx |
---|
title | Example2.fxml |
---|
linenumbers | true |
---|
| <?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.TextField?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.layout.HBox?>
<HBox xmlns:fx="http://javafx.com/fxml">
<TextField fx:id="textField" text="Type something here!"/>
<Button text="Click me!" onAction="#handleUpcaseAction"/>
</HBox> |
| Code Block |
---|
language | javafx |
---|
title | Example2.java |
---|
linenumbers | true |
---|
| public class Example2 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("Example2.fxml"));
primaryStage.setScene(new Scene(root));
primaryStage.show();
}
@FXML
private TextField textField;
@FXML
public void handleUpcaseAction(ActionEvent event) {
textField.setText(textField.getText().toUpperCase());
}
public static void main(String[] args) {
launch(args);
}
} |
|
...
- I linje 5 i Example2.java registreres applikasjonsobjektet som kontrolleren for GUI-elementene som bygges basert på FXML-fila.
- I linje 8 i Example2.fxml så brukes fx:id for å knytte en id til TextField-objektet. Merk at "fx" først må være registrert som XML-namespace i en xmlns-deklarasjon, slik det gjøres i linje 7.
- I linje 11 og 12 i Example2.java deklareres et felt med en @FXML-annotasjon. Annotasjonen forteller FXMLLoader-en at feltet skal settes til GUI-elementet med tilsvarende id.
- I linje 9 i Example2.fxml så brukes onAction-attributtet for å angi handleUpcaseAction som kontroller-metoden for action-hendelsen til knappen. Merk #-tegnet foran metodenavnet.
- I linje 12 og 13 i Example2.java så deklareres en metode med en @FXML-annotasjon for å håndtere action-hendelsen. Merk at vi egentlig kan utelate parameteret, hvis det ikke brukes (som her).
Det sentrale her er registrering av kontroller-objektet og sammenhengen mellom elementer og attributter i FXML-fila og deklarasjoner i kontroller-klassen. Typen og navnet til feltene som er annotert med @FXML må stemme med henholdsvis element-navnet (tag-en) og fx:id-attributtet. Tilsvarende må navnet og signaturen til kontroller-metoden med @FXML-annotasjonen stemme med verdien til onAction-attributtet (eller generelt onXxx for Xxx-hendelsen).
Opprettelse av kontroller-instanser
...
Code Block |
---|
language | javafx |
---|
title | Example3.java |
---|
| public class Example3 extends Application {
@Override
public void start(Stage primaryStage) throws IOException {
FXMLLoader fxmlLoader = new FXMLLoader();
fxmlLoader.setController(new Example3Controller());
Parent root = (Parent) fxmlLoader.load(this.getClass().getResourceAsStream("Example3.fxml"));
primaryStage.setScene(new Scene(root));
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
} |
| Code Block |
---|
language | javafx |
---|
title | Example3Controller.java |
---|
| public class Example3Controller {
@FXML
private TextField textField;
@FXML
public void handleUpcaseAction() {
textField.setText(textField.getText().toUpperCase());
}
} |
|
...