java - 从 JavaFX 中的另一个 Controller 访问字段

标签 java binding javafx controllers

我正在使用 JavaFX 编写小型应用程序,但我遇到了一个问题。

我有 fxml 文件:

MainPane.fxml
Stream.fxml
Play.fxml

并且每个都有自己的 Controller :

MainPaneController.java
StreamController.java
PlayController.java

MainPane 中的位置是:

<GridPane fx:controller="model.MainController" fx:id="mainGrid"
    xmlns:fx="http://javafx.com/fxml" alignment="CENTER" gridLinesVisible="true">

    <children>
        <fx:include source="Stream.fxml"/>
    </children>

    <children>
        <fx:include source="Play.fxml"/>
    </children>
</GridPane>

Play.fxml 有此字段:

<TextField fx:id="searchField" text="Search" onAction="#search"/>

现在,当操作(输入按钮)被触发时,我想访问并更改 Stream.fxml 中的标签,如下所示:

public class PlayController implements Initializable {

    @FXML
    private TextField searchField;

    @FXML
    protected void search() {
        System.out.println("Search");
        String text = searchField.getText();
        //how to access Label in StreamController
    }
}

我想避免像这样的绑定(bind)

MainPaneController <-> StreamController
MainController <-> PlayController

并访问以下字段:

mainController.getStreamController.changeLabel(text)

因为我希望有更好的方法来做到这一点。

最佳答案

公开“嵌套” Controller StreamController 和 PlayController 中的属性。这些 Controller 可以根据需要将属性绑定(bind)到它们定义的 UI 组件。

然后将嵌套 Controller 注入(inject) MainController,如 Nested Controllers 中所述。 FXML 简介部分。

更新:Here's a more similar example ,其中交互的 Controller 都包含在通用的 FXML 中。

关于java - 从 JavaFX 中的另一个 Controller 访问字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23048500/

相关文章:

java - 即使 SQLite 数据库中存在数据也无法登录

java - 如何在 GridPane 上使用 onMouseClicked 修复 'Illegal Argument Exception'?

c++ - ADsOpenObject 绑定(bind)失败

java - Android工作室: cannot find symbol variable toolbar

java - 配置 Spring Boot 以监听本地主机旁边的请求

java - GUI计时器不停止

c# - 通过 MVVM 模式创建 UserControl - DataContext 并绑定(bind)到父级

binding - 如何在 SwiftUI 中绑定(bind)计算属性

java - 将 Excel 导入 TableView (javafx)

java 字符串正则表达式模式匹配和替换字符串