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

JavaFX 2.0 FXML.从其他任务更新场景值

隆璞
2023-03-14

我想从我用FXMLoader加载的场景中获取控制器。用例是:

>

  • 我的 JSON 管理器收到一个 JSON 对象
  • 我启动的任务显示一个新的场景

    Parent p = FXMLLoader.load(getClass().getResource("foo.fxml"));
    Scene scene = new Scene(p);
    stage.setScene(scene);
    

    在那之后,我有空旷的场景。

    现在我这样做来填充组件

    AnchorPane pane = (AnchorPane)((AnchorPane) scene.getRoot()).getChildren().get(0);
    for(Node node : pane.getChildren()){
        String id = node.getId();
        if(id.equals(NAME)){
             ((TextField)node).setText(value);
        }
    }
    

    我的问题是,有没有更简单的方法来做到这一点?我有一个在 FXML 中指定的控制器

    <AnchorPane id="AnchorPane" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="526.0" minWidth="356.0" prefHeight="526.0" prefWidth="356.0" 
    xmlns:fx="http://javafx.com/fxml" fx:controller="bar.foo">
    

    我想获得具有绑定值的实例(在本例中称为name的TextField)

    提前谢谢

  • 共有1个答案

    汪博艺
    2023-03-14

    1)您可以从FXMLLoader获取控制器,但不知道是否可以从Scene获取:

    FXMLLoader fxmlLoader = new FXMLLoader();
    Pane p = fxmlLoader.load(getClass().getResource("foo.fxml").openStream());
    bar.foo fooController = (bar.foo) fxmlLoader.getController();
    

    要稍后在代码的不同部分使用foController,您可以使用Node#setUserData()。例如在上面的代码之后:

    p.setUserData(fooController);
    ...
    // after a while of app logic and code
    bar.foo controller_of_p = (bar.foo) p.getUserData();
    

    这提供了实现目标的解决方法和快捷方式。

    2)如果您的节点有一个id,那么您可以直接< code>Node#lookup()它,而不是构造一个for循环:

    TextField txt = (TextField) pane.lookup("#nodeId");
    
     类似资料:
    • 我是的新手,我有一个和多个场景,我可以使用在它们之间切换,所有工作都很好,直到我尝试在单击菜单项时做一些事情而不是显示场景。 我试图通过使用方法类中调用,在那里我有菜单项action methods,我调用在单击菜单项时将文本写入方法中的文本字段,但在加载该场景的控制器后,什么都没有发生。这是我的代码: 类 家庭控制器类 我知道我可能忽略了一些东西,但我不知道它是什么,帮助将不胜感激。

    • 接口说明 操作场景产生的信息json,需要提交到服务端进行保存,以便下次查看场景的时候,可以正常访问到对该场景操作过得信息 如需调用,请访问 开发者文档 来查看详细的接口使用说明 该接口仅开放给已获取SDK的开发者 API地址 POST /api/scene/1.0.0/upload 是否需要登录 是 请求字段说明 参数 类型 请求类型 是否必须 说明 id string form 是 场景ID

    • A task is special because knowing when a task is about to exit is useful in these circumstances: Frameworks know when to render the UI. Measuring enter/leave allows knowing total script/task time. Exi

    • 7.15. 其他任务 这里有一些简单的任务,你可以自己解决: 把模板文件存放在tmpl/目录,页面数据存放在data/目录。 增加一个处理函数(handler),将对根目录的请求重定向到/view/FrontPage。 修饰页面模板,使其成为有效的HTML文件。添加CSS规则。 实现页内链接。将[PageName]修改为<a href="/view/PageName">PageName</a>。(

    • 问题内容: 我正在尝试学习JavaFX,并将swing应用程序转换为JavaFX。我想做的是使用JavaFX来显示程序的进度。 我以前在Swing中所做的是首先使用自定义JComponent创建一个JFrame。然后让我的主程序调用自定义JComponent的方法,该方法将更改JComponent和repaint()中的形状颜色。 下面给出了我想在JavaFX中实现的目标的想法: 我目前将此作为我

    • 其它场景 还有一些很有趣的应用场景。主要包括: BitMessage:基于区块链的安全可靠的通信系统。 GemHealth:医疗数据的安全管理,已与医疗行业多家公司签订了合作协议。 Storj:基于比特币区块链的安全的数据分布式存储服务。 Tierion:确保数据安全记录。 Twister:去中心化的“微博”系统。