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