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

JavaFX场景构建器访问不同类中的方法

谭向晨
2023-03-14

我一直在谷歌搜索和跟随不同的教程来学习如何做各种事情,到目前为止,我的进展还不错。但现在我已经停滞不前了。

我想做的是,当我的应用程序启动和用户按下登录按钮时,将它们转发到管理员主页上。

这是login.java中的代码:

public class Login extends Application {

private BorderPane quizApp;
private Stage windowLogin;

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

@Override
public void start(Stage windowLogin) {
    this.windowLogin = windowLogin;
    this.windowLogin.setTitle("QuizApp - Please Login or Register");

    windowLogin.resizableProperty().setValue(Boolean.FALSE);

    applyQuizAppLayout();
    applyLoginLayout();
}

public void applyQuizAppLayout() {
    try {
        FXMLLoader fxmlLoader = new FXMLLoader(Login.class.getClassLoader().getResource("view/QuizApp.fxml"));
        quizApp = (BorderPane) fxmlLoader.load();

        Scene scene = new Scene(quizApp);
        windowLogin.setScene(scene);
        windowLogin.show();
    } catch (IOException exception) {
        exception.printStackTrace();
    }
}

public void applyLoginLayout() {
    try {
        FXMLLoader fxmlLoader = new FXMLLoader(Login.class.getClassLoader().getResource("view/Login.fxml"));
        AnchorPane windowLogin = (AnchorPane) fxmlLoader.load();
        quizApp.setCenter(windowLogin);
    } catch (IOException exception) {
        exception.printStackTrace();
    }
}

public Stage getWindowLogin() {
    return windowLogin;
}

Button loginButton = new Button();

@FXML
private void handleLoginButtonAction(ActionEvent event) {
        System.out.println("Login details correct.");
        // windowLogin.setScene(AdministratorHomescreen.start(windowAdministratorHomescreen));
    }
}
}
public class AdministratorHomescreen {

private BorderPane quizApp;
private Stage windowAdministratorHomescreen;

public void start(Stage windowAdministratorHomescreen) {
    this.windowAdministratorHomescreen = windowAdministratorHomescreen;
    this.windowAdministratorHomescreen.setTitle("QuizApp - Welcome Administrator");

    windowAdministratorHomescreen.resizableProperty().setValue(Boolean.FALSE);

    applyQuizAppLayout();
    applyWindowAdministratorHomescreenLayout();
}

public void applyQuizAppLayout() {
    try {
        FXMLLoader fxmlLoader = new FXMLLoader(Login.class.getClassLoader().getResource("view/QuizApp.fxml"));
        quizApp = (BorderPane) fxmlLoader.load();

        Scene scene = new Scene(quizApp);
        windowAdministratorHomescreen.setScene(scene);
        windowAdministratorHomescreen.show();
    } catch (IOException exception) {
        exception.printStackTrace();
    }
}

public void applyWindowAdministratorHomescreenLayout() {
    try {
        FXMLLoader fxmlLoader = new FXMLLoader(
                Login.class.getClassLoader().getResource("view/WindowAdministratorHomescreen.fxml"));
        AnchorPane windowAdministratorHomescreen = (AnchorPane) fxmlLoader.load();
        quizApp.setCenter(windowAdministratorHomescreen);
    } catch (IOException exception) {
        exception.printStackTrace();
    }
}

public Stage getWindowAdministratorHomescreen() {
    return windowAdministratorHomescreen;
}
}

非常感谢任何帮助。

附注。当用户单击该按钮时,我不只是想打开任意场景,而是想打开一个已经应用了quizapp.fxml、quizapp.css和administratorlogin.fxml的场景,这就是我的代码布局。

共有1个答案

钱运浩
2023-03-14

在listener for log on按钮中,您需要将相关信息传递到下一个阶段。

首先在Logon类中为log in按钮设置一个侦听器

loginbutton.setOnAction(new EventHandler<ActionEvent>() {
   @Override
   public void handle(ActionEvent t) {
     try{
       if("the login is successful"){
         String temp = "Your relevant user information, like username or however you keep track of your data";
         windowLogin.hide();
         //You'll then make a new stage to pass the info to the administrator page
         AdministratorHomeScreen nextStage = new AdministratorHomeScreen(windowLogin, temp);
        }
        else{
              System.out.println("incorrect login);
            }
        }
catch(Exception e){
e.printStackTrace();
}
}
});

然后在AdministratorHomeScreen类中执行

public AdministratorHomeScreen(Stage stage, String takenOver){
windowLogIn = stage;
temp = takenOver;
start(new Stage());
}
 类似资料:
  • 我使用Scene Builder和Intelij IDEA来构建JavaFX应用程序。当我在scene Builder中预览时,这个场景看起来是正确的,但当我在IntelliJ中执行时,这个场景被放大了1.5倍。在Scene Builder中,舞台是1280x800,但当我运行程序时,它是1920x1200,尽管我设置了1280x800的场景大小。 这似乎是由于Windows10对应用程序进行了缩

  • 问题内容: 大家好,我正在构建一个JavaFX项目并正在使用JavaFX Scene Builder2。我想将控制器链接到我的fxml文件,但是我看不到在Scene Builder 2中将控制器添加到我的fxml文件的可能性。我想知道是否有人可以帮助我。谢谢。 问题答案: 我偶然在SceneBuilder 2中找到了控制器属性。关闭左侧的层次结构菜单时,将显示“控制器”菜单,可以在其中声明我的控制

  • 我从场景构建器添加了一个vbox并将其可见性设置为false。根据某些条件,我想将可见性设置为true。我该怎么做? 我也是java的新手,所以我无法解决root.getChildren()的问题,它抛出了一个编译错误,getChildren()在父级中具有受保护的访问权限。你能帮忙吗?

  • 第一个问题:由于将集成到容器(BorderPane)中,它本身不需要容器。但是SceneBuilder只提供了将布局创建为容器的选项? 第二个问题:我可以手动创建,然后手动修改以包括。然后,我可以使用SceneBuilder毫无问题地加载borderpane.fxml文件。但是,当我现在更改标签的文本并选择“保存”时,修改的不是,而是如下所示: 新标签文本应该写入,而不是写入。 我想为我的GUI的

  • 我试图找到难以捉摸的JavaFX场景构建器,以便在IntelliJ中使用它。我在Windows操作系统上。 我已经安装了Java8SDK,并且运行良好。显然JavaFX现在包含在其中,但在Java文件夹的任何地方我都找不到场景构建器,它似乎在网上完全消失了。 有人能帮忙吗?我只是想写一个小的GUI程序,看来JavaFX是一个可行的方法(如果不是,那么请不要滥用我的这种想法!)

  • 我是javafX的新手,通过了各种教程,并在Googles上进行了大量搜索。我正在尝试编写一个多屏幕javaFX程序,它的第二个屏幕有一个拆分窗格,其右窗格应该显示一个网格和一个按钮。我用于多屏幕的框架复制自Angela Caiedo的MultipleScreens框架教程(https://github.com/acaicedo/jfx-multiscreen/tree/master/screen