i have a login form made with javafx and i would like to, when we click on the button to connect, the customer is redirected to another 'page'.
This other page is in another class (i want to separate each views because i will have something like 8-9 pages).
It works fine if my second window code is in the same class than the first, but i don't see how to call the other class.
Here is my actual code
// First class, the main
package sample;
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.*;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.layout.*;
import javafx.scene.text.Font;
import javafx.scene.text.FontWeight;
import javafx.stage.Stage;
import javafx.stage.Window;
import views.AffichageSelonDate;
public class Main extends Application {
@Override
public void start(Stage primaryStage) throws Exception{
// Création du stage
primaryStage.setTitle("Formulaire de connexion");
// Création du formulaire
GridPane gridPane = loginForm();
// Ajout des composants dans le gridPane
//components.test test = new components.test();
//test.UIComponentsBis(gridPane);
UIComponents(gridPane);
// Création de la scène
Scene scene = new Scene(gridPane, 500, 300);
// On indique au stage d'utiliser cette scène
primaryStage.setScene(scene);
// On affiche le stage
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
private GridPane loginForm() {
// Création d'une instace du conteneur gridPane
GridPane gridPane = new GridPane();
// Centrer le conteneur sur l'écran, verticalement et horizontalement
gridPane.setAlignment(Pos.CENTER);
// Met un padding(ecart entre le texte et le rebord)
gridPane.setPadding(new Insets(40, 40, 40, 40));
// Met un écart HORIZONTAL entre les colonnes
gridPane.setHgap(10);
// Met un écart HORIZONTAL entre les colonnes
gridPane.setVgap(10);
// Ajoute une contrainte sur la 1ere colonne et tous ses noeuds avec une largeur minimum, une largeur de base et une largeur max
ColumnConstraints columnOneConstraints = new ColumnConstraints(100, 100, Double.MAX_VALUE);
// On aligne tous les élément de la colonne sur la droite
columnOneConstraints.setHalignment(HPos.RIGHT);
// Ajoute une contrainte sur la 2eme colonne et tous ses noeuds avec une largeur minimum, une largeur de base et une largeur max
ColumnConstraints columnTwoConstrains = new ColumnConstraints(200,200, Double.MAX_VALUE);
// On spécifie que si la taille de l'écran est modifier, la colonne 2 grandira hoizontalement
columnTwoConstrains.setHgrow(Priority.ALWAYS);
gridPane.getColumnConstraints().addAll(columnOneConstraints, columnTwoConstrains);
return gridPane;
}
private void UIComponents(GridPane gridPane) {
// Ajout de l'en tête
Label headerLabel = new Label("Connexion");
headerLabel.setFont(Font.font("Arial", FontWeight.BOLD, 24));
gridPane.add(headerLabel, 0, 0, 2, 1);
GridPane.setHalignment(headerLabel, HPos.CENTER);
GridPane.setMargin(headerLabel, new Insets(20, 0, 20, 0));
// Ajout d'un label pour l'identifiant(username)
Label label_username = new Label("Identifiant");
gridPane.add(label_username, 0, 1);
// TextField pour écrire sont nom d'utilisateur(username)
TextField textField_username = new TextField();
textField_username.setPrefHeight(40);
gridPane.add(textField_username, 1, 1);
// Ajout d'un label pour le mot de passe(password)
Label label_password = new Label("Mot de passe");
gridPane.add(label_password, 0, 2);
// TextField pour écrire sont mot de passe(password)
PasswordField passwordField_password = new PasswordField();
passwordField_password.setPrefHeight(40);
gridPane.add(passwordField_password, 1, 2);
// Ajout du bouton pour se connecter
Button button_seConnecter = new Button("Se connecter");
button_seConnecter.setPrefHeight(40);
button_seConnecter.setDefaultButton(true);
button_seConnecter.setPrefWidth(100);
gridPane.add(button_seConnecter,0, 4, 2, 1);
GridPane.setHalignment(button_seConnecter, HPos.CENTER);
GridPane.setMargin(button_seConnecter, new Insets(20, 0, 20, 0));
button_seConnecter.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent actionEvent) {
if(textField_username.getText().isEmpty()) {
showAlert(Alert.AlertType.ERROR, gridPane.getScene().getWindow(), "Erreur dans le formulaire", "Identifiant vide");
return;
}
if(passwordField_password.getText().isEmpty()) {
showAlert(Alert.AlertType.ERROR, gridPane.getScene().getWindow(), "Erreur dans le formulaire", "Mot de passe vide");
return;
}
}
});
}
private void showAlert(Alert.AlertType alertType, Window owner, String title, String message) {
Alert alert = new Alert(alertType);
alert.setTitle(title);
alert.setHeaderText(null);
alert.setContentText(message);
alert.initOwner(owner);
alert.show();
}
}
//Second class with the view
package views;
import javafx.application.Application;
import javafx.geometry.HPos;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.layout.ColumnConstraints;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.Priority;
import javafx.stage.Stage;
public class AffichageSelonDate extends Application {
@Override
public void start(Stage stage) throws Exception {
Stage stageBis = new Stage();
Scene sceneBis = new Scene(testPage(), 800, 500);
stageBis.setScene(sceneBis);
stageBis.show();
}
private GridPane testPage() {
// Création d'une instace du conteneur gridPane
GridPane gridPane = new GridPane();
// Centrer le conteneur sur l'écran, verticalement et horizontalement
gridPane.setAlignment(Pos.CENTER);
// Met un padding(ecart entre le texte et le rebord)
gridPane.setPadding(new Insets(40, 40, 40, 40));
// Met un écart HORIZONTAL entre les colonnes
gridPane.setHgap(10);
// Met un écart HORIZONTAL entre les colonnes
gridPane.setVgap(10);
// Ajoute une contrainte sur la 1ere colonne et tous ses noeuds avec une largeur minimum, une largeur de base et une largeur max
ColumnConstraints columnOneConstraints = new ColumnConstraints(100, 100, Double.MAX_VALUE);
// On aligne tous les élément de la colonne sur la droite
columnOneConstraints.setHalignment(HPos.RIGHT);
// Ajoute une contrainte sur la 2eme colonne et tous ses noeuds avec une largeur minimum, une largeur de base et une largeur max
ColumnConstraints columnTwoConstrains = new ColumnConstraints(200,200, Double.MAX_VALUE);
// On spécifie que si la taille de l'écran est modifier, la colonne 2 grandira hoizontalement
columnTwoConstrains.setHgrow(Priority.ALWAYS);
gridPane.getColumnConstraints().addAll(columnOneConstraints, columnTwoConstrains);
return gridPane;
}
}
The code below works fine but as you can see the second view is in the same class than the login form view, i don't want that.
package sample;
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.*;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.layout.*;
import javafx.scene.text.Font;
import javafx.scene.text.FontWeight;
import javafx.stage.Stage;
import javafx.stage.Window;
import views.AffichageSelonDate;
public class Main extends Application {
@Override
public void start(Stage primaryStage) throws Exception{
// Création du stage
primaryStage.setTitle("Formulaire de connexion");
// Création du formulaire
GridPane gridPane = loginForm();
// Ajout des composants dans le gridPane
//components.test test = new components.test();
//test.UIComponentsBis(gridPane);
UIComponents(gridPane);
// Création de la scène
Scene scene = new Scene(gridPane, 500, 300);
// On indique au stage d'utiliser cette scène
primaryStage.setScene(scene);
// On affiche le stage
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
private GridPane loginForm() {
// Création d'une instace du conteneur gridPane
GridPane gridPane = new GridPane();
// Centrer le conteneur sur l'écran, verticalement et horizontalement
gridPane.setAlignment(Pos.CENTER);
// Met un padding(ecart entre le texte et le rebord)
gridPane.setPadding(new Insets(40, 40, 40, 40));
// Met un écart HORIZONTAL entre les colonnes
gridPane.setHgap(10);
// Met un écart HORIZONTAL entre les colonnes
gridPane.setVgap(10);
// Ajoute une contrainte sur la 1ere colonne et tous ses noeuds avec une largeur minimum, une largeur de base et une largeur max
ColumnConstraints columnOneConstraints = new ColumnConstraints(100, 100, Double.MAX_VALUE);
// On aligne tous les élément de la colonne sur la droite
columnOneConstraints.setHalignment(HPos.RIGHT);
// Ajoute une contrainte sur la 2eme colonne et tous ses noeuds avec une largeur minimum, une largeur de base et une largeur max
ColumnConstraints columnTwoConstrains = new ColumnConstraints(200,200, Double.MAX_VALUE);
// On spécifie que si la taille de l'écran est modifier, la colonne 2 grandira hoizontalement
columnTwoConstrains.setHgrow(Priority.ALWAYS);
gridPane.getColumnConstraints().addAll(columnOneConstraints, columnTwoConstrains);
return gridPane;
}
private void UIComponents(GridPane gridPane) {
// Ajout de l'en tête
Label headerLabel = new Label("Connexion");
headerLabel.setFont(Font.font("Arial", FontWeight.BOLD, 24));
gridPane.add(headerLabel, 0, 0, 2, 1);
GridPane.setHalignment(headerLabel, HPos.CENTER);
GridPane.setMargin(headerLabel, new Insets(20, 0, 20, 0));
// Ajout d'un label pour l'identifiant(username)
Label label_username = new Label("Identifiant");
gridPane.add(label_username, 0, 1);
// TextField pour écrire sont nom d'utilisateur(username)
TextField textField_username = new TextField();
textField_username.setPrefHeight(40);
gridPane.add(textField_username, 1, 1);
// Ajout d'un label pour le mot de passe(password)
Label label_password = new Label("Mot de passe");
gridPane.add(label_password, 0, 2);
// TextField pour écrire sont mot de passe(password)
PasswordField passwordField_password = new PasswordField();
passwordField_password.setPrefHeight(40);
gridPane.add(passwordField_password, 1, 2);
// Ajout du bouton pour se connecter
Button button_seConnecter = new Button("Se connecter");
button_seConnecter.setPrefHeight(40);
button_seConnecter.setDefaultButton(true);
button_seConnecter.setPrefWidth(100);
gridPane.add(button_seConnecter,0, 4, 2, 1);
GridPane.setHalignment(button_seConnecter, HPos.CENTER);
GridPane.setMargin(button_seConnecter, new Insets(20, 0, 20, 0));
button_seConnecter.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent actionEvent) {
if(textField_username.getText().isEmpty()) {
showAlert(Alert.AlertType.ERROR, gridPane.getScene().getWindow(), "Erreur dans le formulaire", "Identifiant vide");
return;
}
if(passwordField_password.getText().isEmpty()) {
showAlert(Alert.AlertType.ERROR, gridPane.getScene().getWindow(), "Erreur dans le formulaire", "Mot de passe vide");
return;
}
showAlert(Alert.AlertType.CONFIRMATION, gridPane.getScene().getWindow(), "Réussi", "Vous avez réussi "+textField_username.getText());
Stage stageBis = new Stage();
Scene sceneBis = new Scene(testPage(), 800, 500);
stageBis.setScene(sceneBis);
stageBis.show();
}
});
}
private void showAlert(Alert.AlertType alertType, Window owner, String title, String message) {
Alert alert = new Alert(alertType);
alert.setTitle(title);
alert.setHeaderText(null);
alert.setContentText(message);
alert.initOwner(owner);
alert.show();
}
/**********************************************************/
private GridPane testPage() {
// Création d'une instace du conteneur gridPane
GridPane gridPane = new GridPane();
// Centrer le conteneur sur l'écran, verticalement et horizontalement
gridPane.setAlignment(Pos.CENTER);
// Met un padding(ecart entre le texte et le rebord)
gridPane.setPadding(new Insets(40, 40, 40, 40));
// Met un écart HORIZONTAL entre les colonnes
gridPane.setHgap(10);
// Met un écart HORIZONTAL entre les colonnes
gridPane.setVgap(10);
// Ajoute une contrainte sur la 1ere colonne et tous ses noeuds avec une largeur minimum, une largeur de base et une largeur max
ColumnConstraints columnOneConstraints = new ColumnConstraints(100, 100, Double.MAX_VALUE);
// On aligne tous les élément de la colonne sur la droite
columnOneConstraints.setHalignment(HPos.RIGHT);
// Ajoute une contrainte sur la 2eme colonne et tous ses noeuds avec une largeur minimum, une largeur de base et une largeur max
ColumnConstraints columnTwoConstrains = new ColumnConstraints(200,200, Double.MAX_VALUE);
// On spécifie que si la taille de l'écran est modifier, la colonne 2 grandira hoizontalement
columnTwoConstrains.setHgrow(Priority.ALWAYS);
gridPane.getColumnConstraints().addAll(columnOneConstraints, columnTwoConstrains);
return gridPane;
}
}
I already tried things like :
AffichageSelonDate a = new AffichageSelonDate();
a.start()
but i get error message
Error:(130, 18) java: method start in class views.AffichageSelonDate cannot be applied to given types;
required: javafx.stage.Stage
found: no arguments
reason: actual and formal argument lists differ in length
even things like
Stage stageBis = new Stage();
Scene sceneBis = new Scene(AffichageSelonDate().testPage(), 800, 500);
stageBis.setScene(sceneBis);
stageBis.show();
but it won't work
Any tips please ? =)