如何在javaFX中使用另一个Controller的Lable / Text Field

时间:2015-06-08 22:12:18

标签: java javafx-2

我正在尝试使用另一个控制器中的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。

1 个答案:

答案 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

中指定为id lblName的视图