当前位置: 首页 > 知识库问答 >
问题:

切换到不同的屏幕JavaFX和FXML

冯枫
2023-03-14

我是JavaFX新手,在做我的项目时,我尝试切换屏幕。我正在考虑相应的AnchorPane可见性设置为真或假,当从另一个控制器访问AnchorPane时,我遇到了问题。我试图使AnchorPane成为静态的,但它给出了NullPointerException。

这是我的密码。

控制器类

public class Controller {

    @FXML
    AnchorPane signInPane;

    @FXML
    private TextField usernameForSignIn;

    @FXML
    private PasswordField password;

    @FXML
    private Button signIn;

    @FXML
    private Button registration;

    @FXML
    void initialize() {
        registration.setOnAction(event -> {
            signInPane.setVisible(false);
            SignUpController.registerPane.setVisible(true);
        });

        signIn.setOnAction(event ->  {
            String usernameText = usernameForSignIn.getText().trim();
            String passwordText = password.getText().trim();

            if(!usernameText.equals("") && !passwordText.equals("")) {
                loginUser(usernameText, passwordText);
            } else {
                System.out.println("Empty login and/or password");
            }

        });
    }

    private void loginUser(String usernameText, String passwordText) {
    }

}

SignUpController类

public class SignUpController {

    @FXML
    static AnchorPane registerPane;

    @FXML
    private TextField email;

    @FXML
    private PasswordField pass;

    @FXML
    private Button signUp;

    @FXML
    private TextField fname;

    @FXML
    private TextField lname;

    @FXML
    private TextField username;

    @FXML
    private RadioButton radioMale;

    @FXML
    void initialize() {

        signUp.setOnAction(event -> {

            signUpNewUser();

        });
    }

    private void signUpNewUser() {
        DatabaseHandler databaseHandler = new DatabaseHandler();

        String firstName = fname.getText();
        String lastName = lname.getText();
        String usname = username.getText();
        String password = pass.getText();
        String e_mail =  email.getText();
        String gender = "";
        if(radioMale.isSelected()) {
            gender = "Male";
        } else {
            gender = "Female";
        }

        User user = new User(firstName,lastName,usname,password,e_mail,gender);

        databaseHandler.signUpUser(user);

    }
}

我试图像这样解决问题,但它关闭了窗口并打开了一个新窗口。

registration.setOnAction(event -> {
    registration.getScene().getWindow().hide();

    FXMLLoader loader = new FXMLLoader();
    loader.setLocation(getClass().getResource("/sample/view/signUp.fxml"));

    try {
        loader.load();
    } catch (IOException e) {
        e.printStackTrace();
    }

    Parent root = loader.getRoot();
    Stage stage = new Stage();
    stage.setScene(new Scene(root));
    stage.showAndWait();

// signInPane.setVisible(false);
});

共有2个答案

公羊光明
2023-03-14

类似这样的东西将确保在initize()之前加载FXML。您不必隐藏AnchorPane,因为实例已经加载。隐藏从FXML创建的项通常会导致错误。

public class Controller {

    @FXML
    Button button_CustomerInfo;
    @FXML
    Button button_A1Child;
    @FXML
    BorderPane bPane;
    @FXML
    ToggleGroup tog;
    Parent r1;
    Parent r2;

    // CREATE SOMETHING LIKE THIS
    // THIS SAMPLE CODE USES THE SAME BORDERPANE
    // AND THE CENTER OF THE BORDERPANE
    // IS CHANGED WHEN A BUTTON IS PRESSED
    {
        try {
            r1 = FXMLLoader.load(getClass().getResource("SecondSreen.fxml"));
            r2 = FXMLLoader.load(getClass().getResource("FirstScreen.fxml"));
        } catch (IOException e) {
            e.printStackTrace();
        }


    }

    public void initialize() {


        button_CustomerInfo.setOnAction(e-> {
            bPane.setCenter(r2);
        });

        button_A1Child.setOnAction(e-> {
            bPane.setCenter(r1);
        });
    }
}
程举
2023-03-14

创建一个窗口并重用它,而不是每次都创建一个新窗口。然后,您可以只检查它是否正在显示,也可以禁用显示时显示它的任何控件。

 类似资料:
  • 在libGDX中切换屏幕似乎有问题。它会切换到游戏屏幕,但不会切换回主屏幕,也不会切换到屏幕上的游戏。我的游戏课: 我的GameScreen类(实现屏幕): 这就是我如何更改屏幕(不工作): 你可以在这里找到全部来源。

  • 嗨,我在libgdx切换屏幕时遇到了问题。我正在建造一个小行星游戏克隆。因此,首先呈现我的Main MenuScreen类(使用Fitviewport),然后我调用setScreen()到GameScreen(GameScreen不使用Fitviewport),除了第二个屏幕呈现为使用Fitviewport。如果我调整第二个屏幕的大小,那么整个窗口用于渲染。为什么会发生这种情况?这里有一些图片..

  • 问题内容: 大家好,我仍在从事这个libgdx项目的工作,我试图找出将屏幕切换到游戏屏幕的最佳方法。现在,当单击一个按钮时,我需要它来切换到游戏屏幕。我已经看到了一些扩展游戏类的实现方式,但是我不确定这里最好的方法是什么。如果您看到一些可以改进的代码,请告诉我。 这是主要的应用程序类: 问题答案: 这就是我始终执行屏幕切换的方式: 首先,主类需要扩展Game(From ),然后您需要具有一个新的t

  • 大家好,我仍然在做这个libgdx项目,我正在努力找出最好的方法来改变我的游戏屏幕现在,当一个按钮被点击时,我需要它转换到游戏屏幕。我见过一些扩展game类的实现,但我不确定从这里开始最好的方法是什么。如果你看到一些可以改进的代码,请让我知道。 以下是主要的应用程序类:

  • 当我的游戏结束时,我试图改变屏幕到游戏结束屏幕,但它没有这样做,只是闪烁当前的游戏屏幕。 游戏结束画面

  • 本文向大家介绍Android横竖屏幕切换小结,包括了Android横竖屏幕切换小结的使用技巧和注意事项,需要的朋友参考一下 Android手机或平板都会存在横竖屏切换的功能,通常是由物理重力感应触发的,但是有时候也不尽然,通常在设置里面我们可以对手机的横竖屏切换进行关闭。 AndroidManifest.xml activity_main.xml MainActivity.java 以上内容给大家