%Teilweise Erzeugt mit dem LaTeX-Generator: http://latex.sehnot.de

%Schriftgröße, Layout, Papierformat, Art des Dokumentes
\documentclass[10pt,oneside,a4paper]{scrartcl}

%Einstellungen der Seitenränder
\usepackage[left=2cm,right=2cm,top=1.5cm,bottom=1.5cm,includeheadfoot]{geometry}

%neue Rechtschreibung
\usepackage[ngerman]{babel}

%Umlaute ermöglichen
\usepackage[utf8]{inputenc}

%Gesamtseitenzahl
\usepackage{lastpage}

% Kopf- und Fußzeile
\usepackage[automark]{scrpage2}

%Quellcode-Listings
\usepackage{listings}

%Hyperlinks
\usepackage{hyperref}

%Kopfzeile
\ihead{Java}
\chead{}
\ohead{http://kohnlehome.de/java/fxml-beispiel.pdf}
\setheadsepline{0.5pt}

%Fußzeile
\setfootsepline{0.5pt}
\ifoot{Franz Kohnle}
\cfoot{Seite \thepage\ von  \pageref{LastPage}}
\ofoot{\today}

\pagestyle{scrheadings}

\begin{document}

% Überschrift 
\begin{center}
\LARGE % Schriftgröße
\bfseries % Fettdruck
\sffamily % Serifenlose Schrift
Beispiel: JavaFX mit FXML
\end{center}


\section{Hauptklasse: \texttt{Beispiel.java}}
\begin{verbatim}
public class Beispiel extends Application {

    public static void main(String[] args) {
        Application.launch(args);
    }

    @Override
    public void start(final Stage fenster) throws Exception {
        // FXML-Datei laden
        final URL url = getClass().getResource("Beispiel.fxml");
        final FXMLLoader fxmlloader = new FXMLLoader(url);
        
        // Controller verbinden
        fxmlloader.setController(new BeispielController());
        
        // Layout laden
        final Parent root = fxmlloader.load();
        
        // Layout auf Fensterinhalt setzen
        fenster.setScene(new Scene(root));
        
        // sonstige Fenstereigenschaften
        fenster.setTitle("Titel");
        
        // Fenster anzeigen
        fenster.show();
    }    
}
\end{verbatim}


\section{Layout: \texttt{Beispiel.fxml}}
\begin{verbatim}
<?xml version="1.0" encoding="UTF-8"?>

<?import java.lang.*?>
<?import java.util.*?>
<?import javafx.scene.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>

<BorderPane xmlns:fx="http://javafx.com/fxml/1" prefHeight="200" prefWidth="300" >
    <top>
        <TextField fx:id="txtEingabe" text="Eingabe" />
    </top>
    <center>
        <Button fx:id="btnDrueckMich" text="Drück mich!" />
    </center>
    <bottom>
        <Label fx:id="lblAusgabe" text="Ausgabe" />
    </bottom>
</BorderPane>
\end{verbatim}


\section{Controller: \texttt{BeispielController.java}}
\begin{verbatim}
public class BeispielController implements Initializable {

    // Membervariablen für Steuerelemente mit Layout verbinden
    // Die Namen müssen mit den IDs in der FXML-Datei übereinstimmen
     
    @FXML
    private TextField txtEingabe;
    
    @FXML
    private Button btnDrueckMich;
    
    @FXML    
    private Label lblAusgabe;

    @Override
    public void initialize(final URL location, final ResourceBundle resources) {
        // Eventhandler für Button
        btnDrueckMich.setOnAction( (event) -> {
            String eingabe = txtEingabe.getText();
            lblAusgabe.setText(eingabe);
        });
    }
}
\end{verbatim}




\end{document}
