簡體   English   中英

如何在JavaFx中將數據從一個場景傳輸到另一個場景?

[英]How do I transfer data from one scene to another in JavaFx?

JavaFX

我正在使用JavaFX創建我的第一個GUI,但是在從第一個場景的兩個文本字段中獲取用戶輸入並將其傳輸到下一個場景時遇到了問題。 我要詢問用戶名,並希望在他們按提交后將輸入的內容放到下一個場景的標簽中。 .getText()似乎不起作用,因為它說我的變量為NULL 我敢肯定,這是一件非常簡單的事情,我只是忽略了它或在認真考慮。 這是我的應用程序的示例代碼。

public class TitleScreen extends Application {
Stage window;
Button button;
Button clearButton;
Button bButton, vButton, dButton;
Button backButton, completeButton;
Scene scene, scene1, scene2, scene3;
String first, last;
public static void main(String[] args){
    launch(args);
}

@Override
public void start(Stage primaryStage) throws Exception {
    window = primaryStage;
    window.setTitle("Flight Assistant");

    /*window.setOnCloseRequest(e -> {
        e.consume();
        closeProgram();
    });*/

    /*
    First scene will ask the User for their name to take that input and place it in the Title
     */
    //Creating a GridPane container
    GridPane grid = new GridPane();
    grid.setPadding(new Insets(10, 10, 10, 10));
    grid.setVgap(5);
    grid.setHgap(5);

    //Defining the Name text field
    final TextField firstName = new TextField();
    firstName.setPromptText("Enter your first name.");
    firstName.setPrefColumnCount(10);
    first = firstName.getText();
    GridPane.setConstraints(firstName, 0, 0);
    grid.getChildren().add(firstName);

    //Defining the Last Name text field
    final TextField lastName = new TextField();
    lastName.setPromptText("Enter your last name.");
    last = lastName.getText();
    GridPane.setConstraints(lastName, 0, 1);
    grid.getChildren().add(lastName);

    //Defining the Submit button
    Button submit = new Button("Submit");
    submit.setOnAction(e-> window.setScene(scene1));
    GridPane.setConstraints(submit, 1, 0);
    grid.getChildren().add(submit);

    //Defining the Clear button
    clearButton = new Button("Clear");
    GridPane.setConstraints(clearButton, 1, 1);
    grid.getChildren().add(clearButton);

    scene = new Scene(grid, 300, 150);

    //Title of scene1
    Label title = new Label();
    title.setText("Welcome " + first + " " + last +" to Flight Assistance!");
    title.setFont(Font.font("Times New Roman", 38));

    //button showing pending request
    button = new Button();
    button.setText("Pending request");
    //switch to scene 2
    button.setOnAction(e -> window.setScene(scene2));

    //Layout 1 and adding elements to the layout
    VBox layout1 = new VBox(200);
    layout1.getChildren().addAll(title, button);
    layout1.setAlignment(Pos.CENTER);

    //setting the layout size for the first scene
    scene1 = new Scene(layout1, 900, 650);

我也嘗試過將String first = firstName.getText();放置在String first = firstName.getText(); 在按鈕的事件處理程序內部,但它給我一個錯誤,表明該var從未使用過。

在load &&上創建第二個場景並獲取值,您可以做兩件事。 1)您可以創建場景onSubmit並將值設置為字段2)在加載時創建場景,但在提交時設置值,並在提交時設置標簽

第一個解決方案

public class TitleScreen extends Application {
Stage window;
Button button;
Button clearButton;
Button bButton, vButton, dButton;
Button backButton, completeButton;
Scene scene, scene1, scene2, scene3;
String first, last;

public static void main(String[] args) {
    launch(args);
}

@Override
public void start(Stage primaryStage) throws Exception {
    window = primaryStage;
    window.setTitle("Flight Assistant");

    /*
     * window.setOnCloseRequest(e -> { e.consume(); closeProgram(); });
     */

    /*
     * First scene will ask the User for their name to take that input and
     * place it in the Title
     */
    // Creating a GridPane container
    GridPane grid = new GridPane();
    grid.setPadding(new Insets(10, 10, 10, 10));
    grid.setVgap(5);
    grid.setHgap(5);

    // Defining the Name text field
    final TextField firstName = new TextField();
    firstName.setPromptText("Enter your first name.");
    firstName.setPrefColumnCount(10);

    GridPane.setConstraints(firstName, 0, 0);
    grid.getChildren().add(firstName);

    // Defining the Last Name text field
    final TextField lastName = new TextField();
    lastName.setPromptText("Enter your last name.");

    GridPane.setConstraints(lastName, 0, 1);
    grid.getChildren().add(lastName);

    // Defining the Submit button
    Button submit = new Button("Submit");
    submit.setOnAction(e -> {
        first = firstName.getText();
        last = lastName.getText();
        createNewScene();
    });
    GridPane.setConstraints(submit, 1, 0);
    grid.getChildren().add(submit);

    // Defining the Clear button
    clearButton = new Button("Clear");
    GridPane.setConstraints(clearButton, 1, 1);
    grid.getChildren().add(clearButton);
    scene = new Scene(grid, 300, 150);
    primaryStage.setScene(scene);
    primaryStage.show();

}

public void createNewScene() {
    Label title = new Label();
    title.setText("Welcome " + first + " " + last + " to Flight Assistance!");
    title.setFont(Font.font("Times New Roman", 38));

    // button showing pending request
    button = new Button();
    button.setText("Pending request");
    // switch to scene 2
    button.setOnAction(e -> window.setScene(scene2));

    // Layout 1 and adding elements to the layout
    VBox layout1 = new VBox(200);
    layout1.getChildren().addAll(title, button);
    layout1.setAlignment(Pos.CENTER);

    // setting the layout size for the first scene
    scene1 = new Scene(layout1, 900, 650);
    window.setScene(scene1);
 }
 }

第二解決方案

public class ThreeStages extends Application {
Stage window;
Button button;
Button clearButton;
Button bButton, vButton, dButton;
Button backButton, completeButton;
Scene scene, scene1, scene2, scene3;
String first, last;

public static void main(String[] args) {
    launch(args);
}

@Override
public void start(Stage primaryStage) throws Exception {
    window = primaryStage;
    window.setTitle("Flight Assistant");

    /*
     * window.setOnCloseRequest(e -> { e.consume(); closeProgram(); });
     */

    /*
     * First scene will ask the User for their name to take that input and
     * place it in the Title
     */
    // Creating a GridPane container
    GridPane grid = new GridPane();
    grid.setPadding(new Insets(10, 10, 10, 10));
    grid.setVgap(5);
    grid.setHgap(5);

    // Defining the Name text field
    final TextField firstName = new TextField();
    firstName.setPromptText("Enter your first name.");
    firstName.setPrefColumnCount(10);

    GridPane.setConstraints(firstName, 0, 0);
    grid.getChildren().add(firstName);

    // Defining the Last Name text field
    final TextField lastName = new TextField();
    lastName.setPromptText("Enter your last name.");

    GridPane.setConstraints(lastName, 0, 1);
    grid.getChildren().add(lastName);

    // Defining the Submit button
    Button submit = new Button("Submit");
    Label title = new Label();
    submit.setOnAction(e -> {
        first = firstName.getText();
        last = lastName.getText();
        title.setText("Welcome " + first + " " + last + " to Flight Assistance!");
        window.setScene(scene1);
    });
    GridPane.setConstraints(submit, 1, 0);
    grid.getChildren().add(submit);

    // Defining the Clear button
    clearButton = new Button("Clear");
    GridPane.setConstraints(clearButton, 1, 1);
    grid.getChildren().add(clearButton);

    scene = new Scene(grid, 300, 150);
    primaryStage.setScene(scene);
    primaryStage.show();
    // Title of scene1

    title.setFont(Font.font("Times New Roman", 38));

    // button showing pending request
    button = new Button();
    button.setText("Pending request");
    // switch to scene 2
    button.setOnAction(e -> window.setScene(scene2));

    // Layout 1 and adding elements to the layout
    VBox layout1 = new VBox(200);
    layout1.getChildren().addAll(title, button);
    layout1.setAlignment(Pos.CENTER);

    // setting the layout size for the first scene
    scene1 = new Scene(layout1, 900, 650);

  }
}

我希望這對你有幫助。 我測試過了

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM