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

加载fxml文件并设置其标签文本时的JavaFX lssue

谭京
2023-03-14

我昨天提出了一个类似的问题,但我认为它没有得到很好的解释,所以我想再问一遍,但我在代码中做了一些修改。如果我写得太多,我会道歉,但我想让一切都能理解。

这是我试图使其工作的代码(位于main controller中):

@FXML
    void mochila (ActionEvent event) throws IOException, SQLException {
        AnchorPane pane = FXMLLoader.load(getClass().getResource("mochila.fxml"));
        anchorPaneContent.getChildren().setAll(pane);
        anchorPane2.setStyle("-fx-background-color: #3f3f3f;");
        cm.getCantidad();
    }

getCantidad是我的bag控制器中的一个函数,它是:

public void getCantidad() {
        lblpokeballCount.setText("Cantidad: "+pokeballcount);
        lblsuperballCount.setText("Cantidad: "+superballcount);
        lblultraballCount.setText("Cantidad: "+ultraballcount);
        lblmasterballCount.setText("Cantidad: "+masterballcount);
    }

所以当我尝试从主控制器运行这个函数时,它返回给我空指针异常。这意味着标签没有初始化,但当我键入第一个anchorpane pane=fxmlloader.load(getClass().getResource(“mochila.fxml”));文件中的所有资源都应该加载吗?因为我在我的bag文件中创建了一个按钮,当点击时运行相同的函数,并且它可以正常工作,因为我是从同一个控制器/文件调用它的。

@FXML
    void mochila (ActionEvent event) throws IOException, SQLException {
        FXMLLoader loader = new FXMLLoader(getClass().getResource("mochila.fxml"));
        anchorPaneContent.getChildren().setAll(loader);
        controladorMochila controller = loader.<controladorMochila>getController();
        controller.getCantidad();
    }

anchorPaneContent是位于主窗格内部的anchorpane。所有按钮都在主窗格中,根据您单击的按钮,anchorpanecontent将为另一个fxml文件更改。我试着像我上面提到的帖子那样去做。但我不能执行AnchorPaneContent.getChildren().setAll(loader);,因为它说:节点setAll不适用参数(FXMLLoader)

共有1个答案

楚岳
2023-03-14

您正在尝试将FXMLLoader添加到锚定窗格中,但这将不起作用,因为FXMLLoader不是可视组件(它是加载FXML文件的东西)。

此外,您试图从fxmlloader获取控制器,而不实际加载FXML文件;这将不起作用,因为controller类是在FXML文件中指定的(因此FXMLLoader在加载文件之前不知道要创建什么样的控制器)。

您需要加载FXML文件并将结果添加到锚点窗格:

@FXML
void mochila (ActionEvent event) throws IOException, SQLException {
    FXMLLoader loader = new FXMLLoader(getClass().getResource("mochila.fxml"));
    anchorPaneContent.getChildren().setAll(loader.load());
    controladorMochila controller = loader.<controladorMochila>getController();
    controller.getCantidad();
}
@FXML
void mochila (ActionEvent event) throws IOException, SQLException {
    FXMLLoader loader = new FXMLLoader(getClass().getResource("mochila.fxml"));
    Parent pane = loader.load();
    anchorPaneContent.getChildren().setAll(pane);
    controladorMochila controller = loader.<controladorMochila>getController();
    controller.getCantidad();
}
 类似资料:
  • 刚接触javaFx并希望使用scenebuilder进行GUI开发时,我遇到了一个问题,在网站上或整个web上搜索我的问题时都没有运气,尽管有人问过类似的问题,认为可能需要一个不同的视角。我试图在快速构建之后通过Netbeans加载一个FXML文件,以测试功能,这样代码就简单了,但是我无法在控制器中设置根文件。我的代码是下面的公共类Divergex extends Application{ 我尝试

  • 问题内容: 我是javaFx的新手,并且希望使用scenebuilder进行GUI开发,尽管遇到了类似的问题,但仍可能需要不同的观点,但我遇到了一个问题,尽管在网站或Web上搜索我的运气都不好。我试图在快速构建以测试功能后通过Netbeans加载FXML文件,以便代码简单,但是我无法在控制器中设置根文件。我的代码是以下公共类Divergex扩展的Application { 我尝试过将fxroot更

  • 我正在尝试使用以下代码将我的fxml文件集成到我的项目中, 程序在第二行崩溃,引发此异常, 也试过了, 我不知道这是否相关,但这是我的iml文件, 是什么原因造成的?我该如何修复它? 这里是我的项目的一个拉链,如果有人想看一下。 谢谢, 亨利

  • 操作步骤: ①在"图层管理"模块,选择一个带有数据的标注图层,点击"样式设置"。 ②选择"散点图" ,点击应用。 ③应用后,数据显示。 操作动图: [查看原图]

  • 我一直在做一个桌面应用程序,在那里我需要使用JavaFX。我在使用Scene Builder构建的eclipse上的JavaFX项目中创建了各种FXML文件。除了这个讨厌的文件(fxmlimglist.FXML)外,我加载任何FXML文件都没有问题。 其主要思想是,当按下一个按钮时,会出现一个新窗口。下面是该按钮的事件处理程序的代码: package explorer中的项目如下所示: https

  • 我正在尝试使用Maven编写一个JavaFx8应用程序。我编写了一个简单的应用程序主类和一个fxml文件(一个不执行任何操作的根fxml文件)。 当我尝试加载fxml根文件时,出现错误“Location is not set”: 我不是JavaFx8的新手,我已经遇到过这种错误,但这次我没有发现问题。 我的类是:app.java rootLayout.fxml: 我检查了打印出getClass输出