【问题标题】:Referencing JavaFX node from different controller从不同的控制器引用 JavaFX 节点
【发布时间】:2016-03-03 05:51:30
【问题描述】:

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

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

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

在关注有关嵌套控制器的文档时,在成功获取 AnchorPane 的根节点的实例后,我陷入了僵局 - 无法弄清楚如何实际更改 AnchorPane。

当调用 AnchorPane 的控制器类中应达到预期效果的函数时,AnchorPane 引用将始终返回空指针错误。

【问题讨论】:

  • 你能发布一些你的代码吗?
  • 如果您使用 <fx:include> 加载第二个 fxml 文件,则使用嵌套控制器方法。当然,您仍然可以执行您建议的第二件事:在控制器中创建一个更新样式的方法。然后你只需调用该方法。没有看到代码,很难知道你在哪里/为什么卡住了。

标签: javafx controller instance fxml


【解决方案1】:

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

Accessing node from outside its controller JavaFX - MVC

有一个链接的教程也很棒,我在其中学习了如何自己做这件事。

【讨论】:

  • 这个例子真的只有当你有一种控制器时才有效,它就像一个更临时的编辑或设置窗口,但如果它是一个更长期的控制器,你可以使用类似的方法。跨度>
【解决方案2】:

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

Passing Parameters JavaFX FXML

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

(在以下示例中,我假设AnchorPaneid 属性的值是"anchorPaneId",并且您可以访问someNodeInTheSameScene,这是与AnchorPane 在同一场景中的任意节点您正在尝试访问。)

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-30
    • 2014-03-14
    • 1970-01-01
    相关资源
    最近更新 更多