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

将参数传递到JavaFXML中的新边框窗格

盖昀
2023-03-14

所以,我需要将参数(ID)传递给通过单击TableView打开的新窗口。具体来说,我需要将series Id参数从MainController传递到TvShowsAboutController。

我正在从MainController打开TvShowsAboutController。像这样:

public void showSeriesInfo() {

    try { 

        BorderPane tvShows = (BorderPane) FXMLLoader.load(getClass().getResource("/seriesapp/javafx/tvShowAbout.fxml"));

        setCenterPane(tvShows);

    } catch (Exception e) { 
        e.printStackTrace(); 
    }  
}

但是我不知道如何在TvShowsAvoutController类中传递参数。如果我创建新的TvShowsAboutController类,那么它会崩溃,因为它没有加载FXML文件。我在StackOverflow Passing Parameters JavaFX FXML上看到了类似的问题,但没有太大帮助。我尝试过这个,但没有运气:

主控制器类

    public void showSeriesInfo() {  
    try {   
        FXMLLoader loader = new FXMLLoader(getClass().getResource("/javafx/tvShowAbout.fxml"));
        TvShowAboutController controller = 
                loader.<TvShowAboutController>getController();
        controller.initData(showsTable.getSelectionModel().getSelectedItem().getShowid());

        BorderPane tvShows = (BorderPane) loader.load();

        setCenterPane(tvShows);

    } catch (Exception e) { 
        e.printStackTrace(); 
    }  
}

TvShowsAboutController类

@FXML
public void initialize(){

    showSeriesInfo();   
}
void initData(Integer showId) {
    this.seriesId = showId;
  }

顺便说一句,打开新窗格是这样工作的,但正如我所说的,我不知道如何通过这个论证

共有1个答案

韶兴德
2023-03-14

默认情况下,FXMLLoader创建FXML文件中指定的控制器类的实例。因此,控制器只有在加载FXML文件后才能使用。因此,您需要更改方法调用的顺序:

FXMLLoader loader = new FXMLLoader(getClass().getResource("/javafx/tvShowAbout.fxml"));

BorderPane tvShows = (BorderPane) loader.load();

TvShowAboutController controller = 
        loader.<TvShowAboutController>getController();
controller.initData(showsTable.getSelectionModel().getSelectedItem().getShowid());

注意这意味着在TvShowAboutController中,将在initData()之前调用initialize(),因此在initialize()中执行的任何操作都不能依赖于正在初始化的id。在这种情况下,应该将任何依赖于此的内容移动到initData()方法。例如,您没有显示showSeriesInfo()的功能,但您可能需要这样做

// @FXML
// public void initialize() {
//     showSeriesInfo();
// }

void initData(int showId) {
    this.seriesId = showId ;
    showSeriesInfo();
}
 类似资料:
  • 我的问题是我传递给新创建的窗口的NOT NULL参数为NULL。我读过很多关于如何通过setter将参数传递到另一个窗口的帖子,对我来说似乎一切都很好,但它并不起作用。 正如调试器所说,以及似乎为空。错误消息:

  • 角度7.1,角度材料7.3 我正在尝试调用函数并传递一些值,它提示以下错误 未找到t1的组件工厂。您是否将其添加到@NgModule.entryComponents? 尽管包含在。但一旦将传递值移除为固定值,它就会工作。 但一旦我删除了该值并修复了<code>dialogRef。打开,它工作正常

  • 问题内容: 通常,我会使用一个JavaScript文件,该文件需要在网页中定义某些变量。 所以代码是这样的: 但是我想做的是: 我尝试了不同的方法,最好的方法是解析查询字符串,如下所示: 然后搜索我的价值观。 我想知道是否还有另一种方法可以执行此操作而无需构建函数来解析我的字符串。 你们都知道其他方法吗? 问题答案: 如果可能,我建议不要使用全局变量。使用名称空间和OOP将参数传递给对象。 此代码

  • 问题内容: 我想将值传递给javascript。如果可能的话,我该怎么办?如何在后备bean中接收它们? 问题答案:

  • 问题内容: 我们已经设置了一些参数来在Jenkins中执行构建(使用简单的“参数化构建”设置)。作业被设置为Maven测试。有没有办法以编程方式将这些参数传递到我们的Java代码中?我们需要基于通过Jenkins设置的参数来执行某些更新功能。 问题答案: 是的,您可以通过Maven执行将Jenkins参数传递给Java代码,如下所示: 请注意, $ JOB_PARAM_1 将捕获Jenkins上设

  • 我的输出: 我有损失“!