我有一个用javafx制作的登录表单,我想当我们单击按钮进行连接时,将客户重定向到另一个“页面”。
这另一页在另一个班上(我想将每个视图分开,因为我将有8-9页之类的内容)。
如果我的第二个窗口代码与第一个窗口在同一个类中,则效果很好,但是我看不到如何调用另一个类。
这是我的实际代码
import requests
url = "https://l.facebook.com/l.php?u=https%3A%2F%2Fwww.washingtonpost.com%2Fscience%2F2020%2F04%2F29%2Fcoronavirus-detection-dogs%2F%3Ffbclid%3DIwAR00eT4EHsWC9986GUSox_7JS7IIg2wAan-tB-NteYJd8I4xckmxnfaNGEI&h=AT0cs4gTKPZlkSElC2uhoDYR98lsONooq_ZUFIK87khBmtZE_3r8j25EfioBPAdp-O8o7efRVG9uB-doy9vLT-AccZMrxnfpEiSYRmA2LTL21IU15bP_PTVw4SSibS1A_uE8bU-ROJexKgdk68VSTtE&__tn__=H-R&c[0]=AT3BNcTNFE13IJu3naJmxTRdJTWtO4O4L0_-nimmzcXpYv3N536YRpQZLg-v2FtP_Oz2DZZpBN6XQPb89JNJTsYFXlK8-1g4xdDLi1T_lfowpI5Ooh8kuLpciLiQ9t-ZmMd2CTUWaGZ_Y_JU0OEvVWfLLfjDq4VOzUtETBcvXHw2ZvQnTQ"
r = requests.get(url, allow_redirects=False)
print(r.headers['Location'])
// 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();
有什么建议吗? =)
答案 0 :(得分:0)
按一下您的回答即可,效果很好,这就是我所做的:
// Second class
package views;
import javafx.geometry.HPos;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.layout.ColumnConstraints;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.Priority;
public class AffichageParDateDeux {
public 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;
}
}
// First class
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.AffichageParDateDeux;
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());
AffichageParDateDeux affichageDeux = new AffichageParDateDeux();
Scene sceneBis = new Scene(affichageDeux.testPage(), 800, 500);
Stage stagebis = new Stage();
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();
}
}
如您所见,我只是用一个简单的函数创建了一个名为'AffichageParDateDeux'的基本类。
在登录表单中,单击“登录”按钮后,我将创建一个新的舞台和一个新场景:
AffichageParDateDeux affichageDeux = new AffichageParDateDeux();
Scene sceneBis = new Scene(affichageDeux.testPage(), 800, 500);
Stage stagebis = new Stage();
stagebis.setScene(sceneBis);
stagebis.show();