提问者:小点点

从不同的控制器引用JavaFX节点


如果活动控制器不是 JavaFX 节点的控制器,是否可以更改该节点的样式(或任何属性)?

例如,假设我想通过单击按钮更改AnchorPane的颜色。按钮和AnchorPane有两个不同的控制器。如何以最简单的方式实现这一目标?

我研究过/尝试过使用..

  • FXML 嵌套控制器 http://docs.oracle.com/javafx/2/fxml_get_started/whats_new2.htm
  • 在 AnchorPane 的控制器类中创建一个设置样式的函数,并在按下按钮时调用它

在跟踪有关嵌套控制器的文档时,在成功获取AnchorPane的根节点的实例后,我陷入了停滞——无法确定如何实际更改AnchorPanel。

当调用AnchorPane的控制器类中的函数时,AnchorPane引用将总是返回空指针错误。


共2个答案

匿名用户

看看我对类似问题的回答。在控制器之间传递数据有点迂回,但可以通过主类。我对类似问题的回答在这里。

从控制器外部访问节点JavaFX-MVC

有一个教程链接,也是伟大的地方,我学会了如何做到这一点自己。

匿名用户

您有多种选择。其中之一是使用与另一个节点关联的控制器,这在这里进行了彻底的描述(如果信息流应该是相反的,您可以将父控制器传递并存储到子控制器中):

传递参数JavaFX FXML

另一种选择是使用css选择器访问另一个节点node,但这不是一个干净的设计,因为它破坏了封装。

(在下面的示例中,我假设< code>AnchorPane的< code>id属性的值为< code >“anchor pane id”,并且您可以访问< code > somenodeinthesesamescene ,这是与您尝试访问的< code>AnchorPane在同一场景中的任意节点。)

Scene scene = someNodeInTheSameScene.getScene();
AnchorPane anchorPane = (AnchorPane) scene.lookup("#anchorPaneId");