我正在使用 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/