У меня есть форма входа, созданная с помощью javafx, и я хотел бы, чтобы, когда мы нажимали кнопку подключения, клиент перенаправлялся на другую «страницу».
Эта другая страница находится в другом классе ( я хочу разделить каждое представление, потому что у меня будет что-то вроде 8-9 страниц).
Это прекрасно работает, если мой код второго окна находится в том же классе, что и первый, но я не вижу, как вызвать другой класс.
Вот мой фактический код
// 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;
}
}
Код ниже работает нормально, но, как вы можете видеть, второе представление находится в том же классе, что и представление формы входа , я не хочу этого.
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;
}
}
Я уже пробовал такие вещи, как:
AffichageSelonDate a = new AffichageSelonDate();
a.start()
, но я получаю сообщение об ошибке
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
даже такие вещи, как
Stage stageBis = new Stage();
Scene sceneBis = new Scene(AffichageSelonDate().testPage(), 800, 500);
stageBis.setScene(sceneBis);
stageBis.show();
but it won't work
Любые советы, пожалуйста? =)