package gui;_x000D_
_x000D_
import javafx.event.ActionEvent;_x000D_
import javafx.event.EventHandler;_x000D_
import javafx.geometry.HPos;_x000D_
import javafx.geometry.Insets;_x000D_
import javafx.geometry.Pos;_x000D_
import javafx.scene.Scene;_x000D_
import javafx.scene.control.Button;_x000D_
import javafx.scene.control.Hyperlink;_x000D_
import javafx.scene.control.Label;_x000D_
import javafx.scene.control.PasswordField;_x000D_
import javafx.scene.control.TextField;_x000D_
import javafx.scene.control.Tooltip;_x000D_
import javafx.scene.layout.GridPane;_x000D_
import static javafx.scene.layout.GridPane.setHalignment;_x000D_
import javafx.scene.text.Font;_x000D_
import javafx.scene.text.FontWeight;_x000D_
import javafx.stage.Stage;_x000D_
_x000D_
public class LoginScherm extends GridPane {_x000D_
// Dit attribuut hebben we in meerdere methoden nodig_x000D_
_x000D_
    private Label lblMessage;_x000D_
    private TextField txfUser;_x000D_
_x000D_
    public LoginScherm() {_x000D_
        // Aligneert grid in het midden        _x000D_
        this.setAlignment(Pos.BOTTOM_LEFT);_x000D_
// Vrije ruimte tussen kolommen        _x000D_
        this.setHgap(10);_x000D_
// Vrije ruimte tussen rijen        _x000D_
        this.setVgap(10);_x000D_
_x000D_
// Vrije ruimte rond de randen van de grid (boven, rechts, onder, links)        _x000D_
        this.setPadding(new Insets(25, 25, 25, 25));_x000D_
_x000D_
        Label lblTitle = new Label("Welcome");_x000D_
        lblTitle.setFont(Font.font("Tahoma", FontWeight.NORMAL, 20));_x000D_
_x000D_
// Bij GridPane kan in elke cel een component geplaatst worden_x000D_
// Een component kan over meerdere rijen en/of kolommen geplaatst worden _x000D_
// De label wordt hier over 2 kolommen en 1 rij geplaatst        _x000D_
        this.add(lblTitle, 0, 0, 2, 1);_x000D_
_x000D_
        Label lblUserName = new Label("User Name:");_x000D_
        this.add(lblUserName, 0, 1);_x000D_
_x000D_
        txfUser = new TextField();_x000D_
        this.add(txfUser, 1, 1);_x000D_
_x000D_
        Label lblPassword = new Label("Password:");_x000D_
        this.add(lblPassword, 0, 2);_x000D_
_x000D_
        PasswordField pwfPassword = new PasswordField();_x000D_
        this.add(pwfPassword, 1, 2);_x000D_
_x000D_
        Tooltip tooltip = new Tooltip();_x000D_
        tooltip.setText(_x000D_
                "Your password must be\n"_x000D_
                + "at least 8 characters in length\n"_x000D_
        );_x000D_
        pwfPassword.setTooltip(tooltip);_x000D_
_x000D_
        Button btnSignIn = new Button("Sign in");_x000D_
// We aligneren btnSignIn links_x000D_
        setHalignment(btnSignIn, HPos.LEFT);_x000D_
        this.add(btnSignIn, 0, 4);_x000D_
_x000D_
        Button btnCancel = new Button("Cancel");_x000D_
// We aligneren btnCancel rechts_x000D_
        setHalignment(btnCancel, HPos.RIGHT);_x000D_
        this.add(btnCancel, 1, 4);_x000D_
_x000D_
        Hyperlink linkForgot = new Hyperlink("Forgot password");_x000D_
        this.add(linkForgot, 0, 5, 2, 1);_x000D_
_x000D_
        lblMessage = new Label();_x000D_
        this.add(lblMessage, 1, 6);_x000D_
_x000D_
// We koppelen een event handler aan de knop Sign In_x000D_
// We gebruiker hiervoor method reference        _x000D_
        btnSignIn.setOnAction(this::buttonPushed);_x000D_
_x000D_
// We koppelen een event handler aan de knop Cancel_x000D_
// We gebruiken hiervoor een lambda expressie_x000D_
        btnCancel.setOnAction(evt -> lblMessage.setText("Cancel button pressed")_x000D_
        );_x000D_
_x000D_
// We koppelen een event handler aan de hyperlink_x000D_
// We gebruiken hiervoor een anonieme innerklasse_x000D_
        linkForgot.setOnAction(new EventHandler<ActionEvent>() {_x000D_
            @Override_x000D_
            public void handle(ActionEvent evt) {_x000D_
                lblMessage.setText("Hyperlink clicked");_x000D_
            }_x000D_
        });_x000D_
_x000D_
    }_x000D_
_x000D_
    // Event-afhandeling: wat er moet gebeuren als we op de knop Sign in klikken_x000D_
    private void buttonPushed(ActionEvent event) {_x000D_
        lblMessage.setText("Sign in button pressed");_x000D_
_x000D_
        //We bouwen een nieuw scherm op waarmee we een scene maken_x000D_
        //Parameter 1: naam gebruiker (ingevuld op loginscherm), willen we tonen op volgend scherm_x000D_
        //Parameter 2: this, volgend scherm krijgt het huidige scherm mee om gemakkelijk te kunnen terugkeren._x000D_
        VolgendScherm vs = new VolgendScherm(txfUser.getText(), this);_x000D_
        Scene scene = new Scene(vs, 200, 50);_x000D_
        Stage stage = (Stage) this.getScene().getWindow();_x000D_
        stage.setScene(scene);_x000D_
        stage.show();_x000D_
    }_x000D_
_x000D_
}_x000D_

// We koppelen een event handler aan de knop Sign In_x000D_
package gui;_x000D_
_x000D_
import javafx.event.ActionEvent;_x000D_
import javafx.event.EventHandler;_x000D_
import javafx.geometry.HPos;_x000D_
import javafx.geometry.Insets;_x000D_
import javafx.geometry.Pos;_x000D_
import javafx.scene.Scene;_x000D_
import javafx.scene.control.Button;_x000D_
import javafx.scene.control.Hyperlink;_x000D_
import javafx.scene.control.Label;_x000D_
import javafx.scene.control.PasswordField;_x000D_
import javafx.scene.control.TextField;_x000D_
import javafx.scene.control.Tooltip;_x000D_
import javafx.scene.layout.GridPane;_x000D_
import static javafx.scene.layout.GridPane.setHalignment;_x000D_
import javafx.scene.text.Font;_x000D_
import javafx.scene.text.FontWeight;_x000D_
import javafx.stage.Stage;_x000D_
_x000D_
public class LoginScherm extends GridPane {_x000D_
// Dit attribuut hebben we in meerdere methoden nodig_x000D_
_x000D_
    private Label lblMessage;_x000D_
    private TextField txfUser;_x000D_
_x000D_
    public LoginScherm() {_x000D_
        // Aligneert grid in het midden        _x000D_
        this.setAlignment(Pos.BOTTOM_LEFT);_x000D_
// Vrije ruimte tussen kolommen        _x000D_
        this.setHgap(10);_x000D_
// Vrije ruimte tussen rijen        _x000D_
        this.setVgap(10);_x000D_
_x000D_
// Vrije ruimte rond de randen van de grid (boven, rechts, onder, links)        _x000D_
        this.setPadding(new Insets(25, 25, 25, 25));_x000D_
_x000D_
        Label lblTitle = new Label("Welcome");_x000D_
        lblTitle.setFont(Font.font("Tahoma", FontWeight.NORMAL, 20));_x000D_
_x000D_
// Bij GridPane kan in elke cel een component geplaatst worden_x000D_
// Een component kan over meerdere rijen en/of kolommen geplaatst worden _x000D_
// De label wordt hier over 2 kolommen en 1 rij geplaatst        _x000D_
        this.add(lblTitle, 0, 0, 2, 1);_x000D_
_x000D_
        Label lblUserName = new Label("User Name:");_x000D_
        this.add(lblUserName, 0, 1);_x000D_
_x000D_
        txfUser = new TextField();_x000D_
        this.add(txfUser, 1, 1);_x000D_
_x000D_
        Label lblPassword = new Label("Password:");_x000D_
        this.add(lblPassword, 0, 2);_x000D_
_x000D_
        PasswordField pwfPassword = new PasswordField();_x000D_
        this.add(pwfPassword, 1, 2);_x000D_
_x000D_
        Tooltip tooltip = new Tooltip();_x000D_
        tooltip.setText(_x000D_
                "Your password must be\n"_x000D_
                + "at least 8 characters in length\n"_x000D_
        );_x000D_
        pwfPassword.setTooltip(tooltip);_x000D_
_x000D_
        Button btnSignIn = new Button("Sign in");_x000D_
// We aligneren btnSignIn links_x000D_
        setHalignment(btnSignIn, HPos.LEFT);_x000D_
        this.add(btnSignIn, 0, 4);_x000D_
_x000D_
        Button btnCancel = new Button("Cancel");_x000D_
// We aligneren btnCancel rechts_x000D_
        setHalignment(btnCancel, HPos.RIGHT);_x000D_
        this.add(btnCancel, 1, 4);_x000D_
_x000D_
        Hyperlink linkForgot = new Hyperlink("Forgot password");_x000D_
        this.add(linkForgot, 0, 5, 2, 1);_x000D_
_x000D_
        lblMessage = new Label();_x000D_
        this.add(lblMessage, 1, 6);_x000D_
_x000D_
// We koppelen<SUF>
// We gebruiker hiervoor method reference        _x000D_
        btnSignIn.setOnAction(this::buttonPushed);_x000D_
_x000D_
// We koppelen een event handler aan de knop Cancel_x000D_
// We gebruiken hiervoor een lambda expressie_x000D_
        btnCancel.setOnAction(evt -> lblMessage.setText("Cancel button pressed")_x000D_
        );_x000D_
_x000D_
// We koppelen een event handler aan de hyperlink_x000D_
// We gebruiken hiervoor een anonieme innerklasse_x000D_
        linkForgot.setOnAction(new EventHandler<ActionEvent>() {_x000D_
            @Override_x000D_
            public void handle(ActionEvent evt) {_x000D_
                lblMessage.setText("Hyperlink clicked");_x000D_
            }_x000D_
        });_x000D_
_x000D_
    }_x000D_
_x000D_
    // Event-afhandeling: wat er moet gebeuren als we op de knop Sign in klikken_x000D_
    private void buttonPushed(ActionEvent event) {_x000D_
        lblMessage.setText("Sign in button pressed");_x000D_
_x000D_
        //We bouwen een nieuw scherm op waarmee we een scene maken_x000D_
        //Parameter 1: naam gebruiker (ingevuld op loginscherm), willen we tonen op volgend scherm_x000D_
        //Parameter 2: this, volgend scherm krijgt het huidige scherm mee om gemakkelijk te kunnen terugkeren._x000D_
        VolgendScherm vs = new VolgendScherm(txfUser.getText(), this);_x000D_
        Scene scene = new Scene(vs, 200, 50);_x000D_
        Stage stage = (Stage) this.getScene().getWindow();_x000D_
        stage.setScene(scene);_x000D_
        stage.show();_x000D_
    }_x000D_
_x000D_
}_x000D_
