opennewwindow java_java - Open new window from another class javafx - Stack Overflow

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() {

@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() {

@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 ? =)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值