如何在 javaFX 中使用来自另一个控制器的 Lable/Text 字段

How to use a Lable/Text Field from another Controller in javaFX

我正在尝试使用来自另一个控制器的标签文本。听到的是我的代码

Design view

    <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 有不同的控制器。

你可以这样获取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 与要更改的标签。您可以执行以下操作:https://gist.github.com/varren/ac08d1855322c685adcf

fxmlLoader.getNamespace().get("lblName"); 将尝试查找在您的 xml

中指定的 ID 为 lblName 的视图