如果活动控制器不是 JavaFX 节点的控制器,是否可以更改该节点的样式(或任何属性)?
例如,假设我想通过单击按钮更改AnchorPane的颜色。按钮和AnchorPane有两个不同的控制器。如何以最简单的方式实现这一目标?
我研究过/尝试过使用..
在跟踪有关嵌套控制器的文档时,在成功获取AnchorPane的根节点的实例后,我陷入了停滞——无法确定如何实际更改AnchorPanel。
当调用AnchorPane的控制器类中的函数时,AnchorPane引用将总是返回空指针错误。
看看我对类似问题的回答。在控制器之间传递数据有点迂回,但可以通过主类。我对类似问题的回答在这里。
从控制器外部访问节点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");