我正在使用JavaFX编写小应用程序,但我遇到了一个问题。
我有fxml文件:
MainPane.fxml
Stream.fxml
Play.fxml
并且每个人都有自己的控制器:
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"/>
现在当action(输入按钮)被触发时我想访问并更改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
}
}
我想避免像
那样绑定MainPaneController <-> StreamController
MainController <-> PlayController
并访问以下字段:
mainController.getStreamController.changeLabel(text)
因为我希望有更好的方法来做到这一点。
答案 0 :(得分:4)
在&#34;嵌套&#34;中展示属性控制器StreamController和PlayController。这些控制器可以根据需要将属性绑定到它们定义的UI组件。
然后按照FXML简介的Nested Controllers部分所述,将嵌套控制器注入MainController。
更新:Here's a more similar example,其中交互控制器都包含在公共FXML中。
答案 1 :(得分:0)
你需要将你的Fxmlloader从控制器发送到其他人,我的意思是在playController中创建一个方法来从StreamController获取你的fxmloader。
public class PlayController implements Initializable {
pulic StreamController stream;
@FXML
private TextField searchField;
@FXML
protected void search() {
System.out.println("Search");
String text = searchField.getText();
//how to access Label in StreamControlle
stream._yourLabeL ....
}
public StreamController StreamController(){
return stream;
}
public StreamController setStreamController(StreamController streamController){
stream=streamController
}
并且在包含fxml loader的类中添加此行
StreamController streamcontroller=myStreamFxml.getController();
new PlayController().setStreamController(streamController);