JavaFX控制器未获取内容

JavaFX控制器未获取内容,java,javafx,Java,Javafx,我刚开始在JavaFX中使用控制器,我遇到了麻烦。我的第一个场景加载得很好,但是当我点击按钮移动到第二个场景时,什么都没有出现,只是一个空白框。关于如何加载我的第二个场景有什么线索吗 以下是我的开场白: public class ControllerConnect implements Controller{ private final FlowPane root; public ControllerConnect() { //Connection page ob

我刚开始在JavaFX中使用控制器,我遇到了麻烦。我的第一个场景加载得很好,但是当我点击按钮移动到第二个场景时,什么都没有出现,只是一个空白框。关于如何加载我的第二个场景有什么线索吗

以下是我的开场白:

public class ControllerConnect implements Controller{
    private final FlowPane root;
    public ControllerConnect() {
        //Connection page objects
        TextField username = new TextField();
        TextField password = new TextField();
        username.setAlignment(Pos.CENTER);
        password.setAlignment(Pos.CENTER);
        Button connect = new Button("Connect");
        connect.setOnAction(new EventHandler<ActionEvent>() {

            @Override
            public void handle(ActionEvent e) {
                try {
                    Class.forName("com.mysql.jdbc.Driver");
                } catch (ClassNotFoundException ex) {
                    System.out.println("Error: unable to load driver class!");
                    System.exit(1);
                }
                String URL = "jdbc:mysql://localhost:3306/world";
                String name = username.getText();
                String pass = password.getText();

                try {
                    Connection conn = DriverManager.getConnection(URL, name, pass);
                } catch (SQLException e1) {
                    e1.printStackTrace();
                }
                ControllerCity controller2 = new ControllerCity();
                connect.getScene().setRoot(controller2.getContent());


            }
        });
        root = new FlowPane(connect);
        Label user = new Label("Username:");
        Label pass = new Label("Password:");
        user.setAlignment(Pos.CENTER);
        pass.setAlignment(Pos.CENTER);
        username.setAlignment(Pos.CENTER);
        password.setAlignment(Pos.CENTER);
        connect.setAlignment(Pos.CENTER);
        VBox connectionBox = new VBox(10, user, username, pass, password, connect);
        connectionBox.setAlignment(Pos.CENTER);
        root.getChildren().addAll(connectionBox);
        root.setMinSize(640, 480);
        root.setAlignment(Pos.CENTER);


    }
    @Override
    public Parent getContent() {
        return root;
    }
}
应用程序类别:

public void start(Stage primaryStage) throws Exception {
    ControllerConnect controllerconnect = new ControllerConnect();
    Scene scene = new Scene(
            controllerconnect.getContent()
    );

    primaryStage.setScene(scene);
    primaryStage.show();
}

按钮存在:你就是看不见

问题在于,您的第一个“控制器”(当然是视图,而不是控制器)将最小大小设置为
640x480
像素。场景的大小将调整为根的首选大小,在这种情况下,根的大小将为
640 x 480
(因为第一个场景中的控件不需要比此更多的空间)

第二个场景的最小大小设置为
1024 x 768
。因此,第二个视图现在比包含它的舞台大,并且按钮不在视图中

如果在按下“连接”按钮后展开窗口,您将看到这些按钮

如果你更换

ControllerCity controller2 = new ControllerCity();
connect.getScene().setRoot(controller2.getContent());
在按钮的事件处理程序中

ControllerCity controller2 = new ControllerCity();
Scene scene = connect.getScene();
scene.setRoot(controller2.getContent());
scene.getWindow().sizeToScene();

然后窗口将调整大小,以便您可以看到按钮。

按钮存在:您就是看不到它们

问题在于,您的第一个“控制器”(当然是视图,而不是控制器)将最小大小设置为
640x480
像素。场景的大小将调整为根的首选大小,在这种情况下,根的大小将为
640 x 480
(因为第一个场景中的控件不需要比此更多的空间)

第二个场景的最小大小设置为
1024 x 768
。因此,第二个视图现在比包含它的舞台大,并且按钮不在视图中

如果在按下“连接”按钮后展开窗口,您将看到这些按钮

如果你更换

ControllerCity controller2 = new ControllerCity();
connect.getScene().setRoot(controller2.getContent());
在按钮的事件处理程序中

ControllerCity controller2 = new ControllerCity();
Scene scene = connect.getScene();
scene.setRoot(controller2.getContent());
scene.getWindow().sizeToScene();

然后窗口将调整大小,以便您可以看到按钮。

@Yahya为什么不呢?我删除了决赛,但这并没有解决问题。这些看起来更像视图,而不是控制器。可以显示应用程序类吗?我假设您只是在创建一个场景,将其根设置为
new ControllerConnect().getContent()
,等等。大概没有例外?将其添加到question@Yahya为什么不呢?我删除了决赛,但这并没有解决问题。这些看起来更像视图而不是控制器。可以显示应用程序类吗?我假设您只是在创建一个场景,将其根设置为
new ControllerConnect().getContent()
,等等。大概没有例外?将其添加到问题中