我正在尝试使用另一个控制器中的Label文本。听到的是我的代码
设计视图
<AnchorPane id="AnchorPane" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="cbc.MainController">
<children>
<BorderPane prefHeight="400.0" prefWidth="600.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
<top>
<AnchorPane prefHeight="78.0" prefWidth="600.0" BorderPane.alignment="CENTER">
<children>
<Label fx:id="lblName" layoutX="506.0" layoutY="32.0" text="Rifat" />
</children>
</AnchorPane>
</top>
<left>
<AnchorPane prefHeight="200.0" prefWidth="200.0" BorderPane.alignment="CENTER">
<children>
<Button fx:id="btnHome" layoutX="49.0" layoutY="39.0" mnemonicParsing="false" onAction="#btnHome" text="Home" />
<Button fx:id="btnOne" layoutX="36.0" layoutY="87.0" mnemonicParsing="false" onAction="#btnOne" text="Seen One" />
<Button fx:id="btnTwo" layoutX="36.0" layoutY="136.0" mnemonicParsing="false" onAction="#btnTwo" text="Seen Two" />
</children>
</AnchorPane>
</left>
<center>
<AnchorPane fx:id="acContent" prefHeight="200.0" prefWidth="200.0" BorderPane.alignment="CENTER" />
</center>
</BorderPane>
</children>
</AnchorPane>
然后我通过此代码
将另一个fxml文件包含到fx:id="acContent"
中
public class MainController implements Initializable {
@Override
public void initialize(URL url, ResourceBundle rb) {
try {
acContent.getChildren().clear();
acContent.getChildren().add(FXMLLoader.load(getClass().getResource("Home.fxml")));
} catch (IOException ex) {
Logger.getLogger(MainController.class.getName()).log(Level.SEVERE, null, ex);
}
}
在Home.fxml
上插入标签和按钮。
如果我单击该按钮,则标签文本将更改为fx:id="lblName"
,这是Main.fxml中的节点。当然Main.fxml和Home.fxml有不同的Controller。
答案 0 :(得分:0)
您可以通过以下方式获取Home.fxml
的控件:
FXMLLoader fxmlLoader = new FXMLLoader();
try {
fxmlLoader.load(getClass().getResource("Home.fxml").openStream());
MyControllerClass controller = fxmlLoader.getController();
// Or use this to find your label
Label myLabel = (Label) fxmlLoader.getNamespace().get("lblName");
} catch (IOException e) {
e.printStackTrace();
}
<强>更新强>
所以这里有更多的代码可以更好地解释它:让我们假设你有你的fxml文件,一些MainViewController
控制器和一些ListItemController
和ListItemController有fxml你想要改变的Label。您可以执行以下操作:https://gist.github.com/varren/ac08d1855322c685adcf
fxmlLoader.getNamespace().get("lblName");
会尝试查找xml
lblName
的视图