Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Migrated to Confluence 5.3

...

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 jeg 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.

...

  1. Metodene (funksjonene) main og start sørger for å starte opp programmet og laste inn FXML-innholdet i et vindu. Etter at vinduet er laget og fylt med FXML-innholdet, så settes variablene som er markert med @FXML til objektene som har tilsvarende fx:id (med litt Java-magi).

  2. Når programmet er igang vil hendelsesmetodene bli kalt når spilleren gjør bestemte ting. F.eks. vil handleTrykkHer bli kalt når brukeren trykker på knappen, fordi vi har skrevet onAction="#handleTrykkHer" i Button-elementet. Hvis du lager flere knapper, så må du finne på nye metodenavn og legge dem inn i både Java-koden og FXML-en på samme måte.

Her er all koden for eksemplet:

Code Block
package trinn2;

import java.io.IOException;
import javafx.application.Application;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.shape.Polygon;
import javafx.stage.Stage;

public class Strekmann extends Application {
    @Override
    public void start(Stage primaryStage) throws IOException {
        FXMLLoader fxmlLoader = new FXMLLoader(this.getClass().getResource("Strekmann.fxml"));
        fxmlLoader.setController(this);
        Parent root = (Parent) fxmlLoader.load();
        primaryStage.setScene(new Scene(root));
        primaryStage.show();
    }
    public static void main(String[] args) {
        launch(args);
    }
 
    @FXML
    Button trykkHerKnapp;
    @FXML
    Polygon kniv;

    @FXML
    void handleTrykkHer() {
        double layoutX = kniv.getLayoutX() - 10;
        kniv.setLayoutX(layoutX);
        String melding = "Bom!";
        if (layoutX > 50 && layoutX < 80) {
            melding = "Treff!";
        }
        trykkHerKnapp.setText(melding);
    }
}

...