Java 如何在同一窗口中依次打开两个类

Java 如何在同一窗口中依次打开两个类,java,javafx,javafx-2,Java,Javafx,Javafx 2,我正在使用NetBeans IDE在javafx中开发一个项目。我也是javafx新手。我几乎创建了我所有的类。现在我正试图把它们联系起来。我的意思是,当一个类中的一个按钮被按下时,另一个类中的一个函数应该工作。我需要在同一窗口上显示该功能。我将在这里提供我的一个类的代码。我没有在这里包含导入语句和其他不必要的代码部分: package login; public class Login extends Application { TextField t1,t2,t4,t5; Passwor

我正在使用NetBeans IDE在javafx中开发一个项目。我也是javafx新手。我几乎创建了我所有的类。现在我正试图把它们联系起来。我的意思是,当一个类中的一个按钮被按下时,另一个类中的一个函数应该工作。我需要在同一窗口上显示该功能。我将在这里提供我的一个类的代码。我没有在这里包含导入语句和其他不必要的代码部分:

package login;

public class Login extends Application {

TextField t1,t2,t4,t5;
PasswordField t3;
ComboBox comboBox1,comboBox2,comboBox3;

private Connection connect = null;
private Statement statement = null;
private PreparedStatement preparedStatement = null;

@Override
public void start(Stage stage) {

    BorderPane border = new BorderPane();

    border.setTop(loginHBox1());
    border.setLeft(loginVBox1());
    border.setRight(loginVBox2());

    Scene scene = new Scene(border,700,550);
    stage.setScene(scene);
    stage.setResizable(false);
    scene.getStylesheets().add
    (Login.class.getResource("Login.css").toExternalForm());
    stage.show();
}

private HBox loginHBox1() {

    HBox hbox = new HBox();
    hbox.setPadding(new Insets(15, 12, 10, 180));
    hbox.setSpacing(10);

    Label lb1=new Label("LOG IN OR CREATE NEW ACCOUNT");
    lb1.setAlignment(Pos.CENTER);
    lb1.setFont(Font.font("Calibri",FontWeight.BOLD,26));
    lb1.setTextFill(Color.BLACK);

    hbox.getChildren().addAll(lb1);

    return hbox;
}

private VBox loginVBox1() {

    VBox vbox = new VBox();
    vbox.setPadding(new Insets(20,30,15,50));
    vbox.setSpacing(10);

    Label lb3=new Label("LOG  IN");
    lb3.setAlignment(Pos.CENTER);
    lb3.setFont(Font.font("Calibri",FontWeight.BOLD,24));
    lb3.setTextFill(Color.BLACK);

    Label lb1=new Label("Username");
    lb1.setAlignment(Pos.CENTER);
    lb1.setFont(Font.font("Calibri",FontWeight.BOLD,16));
    lb1.setTextFill(Color.BLACK);

    TextField t11=new TextField();
    t11.setPrefSize(150,30);

    Label lb2=new Label("Password");
    lb2.setAlignment(Pos.CENTER);
    lb2.setFont(Font.font("Calibri",FontWeight.BOLD,16));
    lb2.setTextFill(Color.BLACK);

    PasswordField pw11=new PasswordField();
    pw11.setPrefSize(150,30);

    Button b1=new Button("LOG IN");
    b1.setFont(Font.font("Calibri",FontWeight.BOLD,16));
    b1.setPrefSize(80,5);

    btnl2.setOnAction(new EventHandler<ActionEvent>() {
     @Override
     public void handle(ActionEvent e) {
      // THIS IS THE PART WHERE AM CALLING THE FUNCTION OF OTHER CLASS. WHICH FUNCTION
      // SHOULD I CALL HERE ?
     }
     });

    vbox.getChildren().addAll(lb3,lb1,t11,lb2,pw11,b1);

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

在JavaFX应用程序中,您应该只有一个扩展
应用程序的类。如果
UserPage
应该是一个UI组件,为什么不将其作为所提供窗格之一(例如Ancorpane、BorderPane等)的子类。就你而言

public class UserPage extends BorderPane{

    TextField t1,t3,t4;
    ComboBox comboBox1;

    private Connection connect = null;
    private Statement statement = null;
    private PreparedStatement preparedStatement = null;

    public UserPage(){
      this.setTop(addHBox1());
      this.setRight(addVBox1());
      this.setLeft(addVBox2());
      this.setBottom(addHBox2());
    }

    //.... Your methods
} 
对我来说似乎最合理。从
用户页面
中删除
场景
相关代码。它不属于那里。使用修改后的
UserPage
类,如果要在同一窗口中打开
UserPage
,则
Login
类中的
EventHandler
可以拥有此代码

btnl2.setOnAction(new EventHandler<ActionEvent>() {
 @Override
 public void handle(ActionEvent e) {
  ((Stage)btnl2.getScene().getWindow()).setScene(new Scene(new UserPage()));
 }
 });
您的应用程序启动可能如下所示

public class Main extends Application{

    @Override
    public void start(Stage stage) throws Exception {
        stage.initStyle(StageStyle.UTILITY);
        stage.setResizable(false);
        Login loginview = new Login();
        Scene scene = new Scene(loginview, 400, 200);
        stage.setScene(scene);
        stage.show();       
    }

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

在我看来,这会更干净。

所有这些我整个项目都做得不对……你帮了我。。谢谢。。
btnl2.setOnAction(new EventHandler<ActionEvent>() {
 @Override
 public void handle(ActionEvent e) {
     Stage usrpagestage = new Stage();
     usrpagestage.setScene(new Scene(new UserPage()));
     ((Stage)btnl2.getScene().getWindow()).close();
     usrpagestage.show();
 }
 });
public class Login extends GridPane{ .... }
public class Main extends Application{

    @Override
    public void start(Stage stage) throws Exception {
        stage.initStyle(StageStyle.UTILITY);
        stage.setResizable(false);
        Login loginview = new Login();
        Scene scene = new Scene(loginview, 400, 200);
        stage.setScene(scene);
        stage.show();       
    }

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