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

如何在JavaFX中与FXML表单交互?[副本]

宿建本
2023-03-14

考虑到这个例子,我如何从主代码中获取或设置表单上的任何内容?

我们只有一个简单的Main函数,如

@Override
public void start(Stage stage) throws Exception {
  Parent root = FXMLLoader.load(getClass().getResource("fxml_example.fxml"));

  Scene scene = new Scene(root, 300, 275);

  stage.setTitle("FXML Welcome");
  stage.setScene(scene);
  stage.show();
}

FXML中定义的表单。

以及一个从不显式实例化的控制器类。

由于我在Main代码中没有到控制器类实例的链接,如何从控制器外部访问表单上的任何内容?

共有1个答案

邵凯定
2023-03-14

您可以做的一件事是让为控制器创建一个默认构造函数,并让它将< code>this存储到一个私有静态变量中。然后,您可以为该变量创建一个静态getter来检索控制器实例。然后,您可以直接公开带< code>@FXML注释的字段,或者为它们提供getter方法。由于显而易见的原因,如果加载同一个控制器的多个实例,就会出现这种情况。

不过,我对JavaFX没有太多经验,所以我不能肯定这是一个好还是坏的解决方案……我只知道它适用于更简单的情况。

编辑:这个答案有更好的解决方案:访问FXML控制器类

基本上:

FXMLLoader fxmlLoader = new FXMLLoader();
Pane p = fxmlLoader.load(getClass().getResource("foo.fxml").openStream());
FooController fooController = (FooController) fxmlLoader.getController();
 类似资料:
  • 我曾经有一个RootLayout边框窗格,它有一个fx:includes锚点窗格,上面有我的控制器。我正试图将这两个文件合并到一个.fxml文件中,但在与应用程序的上半部分交互时遇到了问题(按钮、组合框等不可点击)。我假设我的组织出了问题,甚至可能是错误的高度,但我没有看到它,这是我的第一个javaFX应用程序。如果我在JavaFX Scene Builder中打开.fxml,我只能看到层次结构中

  • 与图表交互 这个库允许你完全自定义与图表视图触摸交互的各种情况以及对交互其作用的回调方法。 打开/关闭交互 setTouchEnabled(boolean enabled): 允许你打开或者关闭与图表的所有触摸交互的情况。 setDragEnabled(boolean enabled): 打开或关闭对图表的拖动。 setScaleEnabled(boolean enabled):打开或关闭对图表所

  • 如果我有一个使用FXML的JavaFX项目,我将如何构造它以遵守模型-视图-控制器模式?这就是我所假定的一般结构如下所示: 模型-基础程序(GUI表示的内容)。 视图-FXML文件。 控制器-FXML控制器。 问题摘要(请阅读全文): 如何构造JavaFX项目(它使用FXML来遵循MVC模式)?视图应该是FXML控制器类,然后我应该有一个主控制器类,以便FXML控制器从模型获取信息,主控制器处理操

  • 我正在用javafx设计一个独立的应用程序(带有scenebuilder 8的FXML),现在我需要在FXML中创建一个CheckBoxTreeItem(查看下图)。 方格树 在搜索时,我得到了一个链接“https://docs.oracle.com/javase/8/scene-builder-2/user-guide/library-panel.htm这有助于我将定制的CheckBoxTree

  • 我们如何一起使用数组和数组列表(如果可能的话)? 我想将一些字符串存储到数组列表中,稍后将它们取出,解析成字符串数组,将这些数组存储在数组列表中,稍后能够从数组列表中检索数据... 查看这段代码,并随意将我拆分为做蹩脚的编码;我已经有一段时间没有使用Java了。 在前面,我已经将一些外部文件转储到< code>nonParsedData中。就是一串弦。没什么大不了的。我取出这些字符串,读取它们,放

  • 如何在Eclipse中导入javafx?为什么不在jre或JDK中默认添加它?Java中推荐的表单库是什么? 我已经安装了e(fx)clipse 3.6.0插件,但它没有帮助。