簡體   English   中英

JavaFX FXML標簽不會更新其值

[英]JavaFX FXML Label doesn't update its value

我正在嘗試從另一個控制器更新標簽,但不會進行視覺更新。

以下控制器控件可動態加載外部控制器。

private ClientShowController clientShowController; 

public void initialize(){ 

    try { 
        pane_clientDetail.getChildren().add(FXMLLoader.load(getClass().getResource("../resources/Client_show.fxml")));
        FXMLLoader loader = new FXMLLoader(getClass().getResource("../resources/Client_show.fxml")); 
        loader.load(); 

        clientShowController = (ClientShowController) loader.getController(); 
        System.out.println(clientShowController);

    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
} 

private void showPersonDetails(Person person) {
    if (person != null) { 
        //Update 
        clientShowController.setId(Integer.toString(person.getId()));
    }
} 

第二個控制器:

@FXML private Label lbl_id;    

public void setId(String strId){
    System.out.println(strId);
    lbl_id.setText(strId);
    System.out.println(lbl_id);
}

注意:

  • System.out在標簽上正確顯示了ID;
  • 第二個控制器綁定到第一個嵌入的FXML文件。 如代碼所示,第二個FXML文件/控制器是動態加載的: pane_clientDetail.getChildren().add()
  • 通過第二個控制器中的initialize方法設置ID時,該ID將按預期方式顯示在標簽中:

    公共無效initialize(){this.setId(“ 12”); }

編輯:

第一個(主要)FXML定義:

<Pane fx:id="pane_clientDetail"/>

此窗格被聲明為屬性

@FXML private Pane pane_clientDetail;

第二:

<GridPane xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="application.controllers.ClientShowController">
  <columnConstraints>
    <ColumnConstraints hgrow="SOMETIMES" maxWidth="144.0" minWidth="10.0" prefWidth="102.0" />
    <ColumnConstraints hgrow="SOMETIMES" maxWidth="195.0" minWidth="10.0" prefWidth="195.0" />
  </columnConstraints>
  <rowConstraints>
    <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
    <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
    <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
      <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
      <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
      <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
      <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
      <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
      <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
  </rowConstraints>
   <children>
      <Label text="given name" GridPane.rowIndex="1">
         <GridPane.margin>
            <Insets left="10.0" />
         </GridPane.margin>
      </Label>
      <Label text="family name" GridPane.rowIndex="2">
         <GridPane.margin>
            <Insets left="10.0" />
         </GridPane.margin>
      </Label>
      <Label text="gender" GridPane.rowIndex="3">
         <GridPane.margin>
            <Insets left="10.0" />
         </GridPane.margin>
      </Label>
      <Label text="email" GridPane.rowIndex="4">
         <GridPane.margin>
            <Insets left="10.0" />
         </GridPane.margin>
      </Label>
      <Label text="phone" GridPane.rowIndex="5">
         <GridPane.margin>
            <Insets left="10.0" />
         </GridPane.margin>
      </Label>
      <Label text="id">
         <GridPane.margin>
            <Insets left="10.0" />
         </GridPane.margin>
      </Label>
      <Label text="address" GridPane.rowIndex="6">
         <GridPane.margin>
            <Insets left="10.0" />
         </GridPane.margin>
      </Label>
      <Label text="zip" GridPane.rowIndex="7">
         <GridPane.margin>
            <Insets left="10.0" />
         </GridPane.margin>
      </Label>
      <Label fx:id="lbl_id" text="-" GridPane.columnIndex="1">
         <GridPane.margin>
            <Insets />
         </GridPane.margin>
      </Label>
      <Label fx:id="lbl_given_name" text="-" GridPane.columnIndex="1" GridPane.rowIndex="1" />
      <Label fx:id="lbl_family_name" text="-" GridPane.columnIndex="1" GridPane.rowIndex="2" />
      <Label fx:id="lbl_gender" text="-" GridPane.columnIndex="1" GridPane.rowIndex="3" />
      <Label fx:id="lbl_email" text="-" GridPane.columnIndex="1" GridPane.rowIndex="4" />
      <Label fx:id="lbl_phone" text="-" GridPane.columnIndex="1" GridPane.rowIndex="5" />
      <Label fx:id="lbl_address" text="-" GridPane.columnIndex="1" GridPane.rowIndex="6" />
      <Label fx:id="lbl_zip" text="-" GridPane.columnIndex="1" GridPane.rowIndex="7" />
      <Label text="city" GridPane.rowIndex="8">
         <GridPane.margin>
            <Insets left="10.0" />
         </GridPane.margin>
      </Label>
      <Label fx:id="lbl_city" text="-" GridPane.columnIndex="1" GridPane.rowIndex="8" />
   </children>
   <VBox.margin>
      <Insets top="10.0" />
   </VBox.margin>
</GridPane>

看來您有兩個UI實例:

1. pane_clientDetail.getChildren().add(FXMLLoader.load(getClass().getResource("../resources/Client_show.fxml")));

2. FXMLLoader loader = new FXMLLoader(getClass().getResource("../resources/Client_show.fxml")); 

您首先加載一個視圖,並將其附加到pane_clientDetail ,這就是正在顯示的視圖。 然后,您創建另一個,並為其獲取控制器。 出於明顯的原因,第二個控制器不會更新第一個視圖。

解:

FXMLLoader loader = new FXMLLoader(getClass().getResource("../resources/Client_show.fxml"));
Parent view = loader.load();
pane_clientDetail.getChildren().add(view);
// rest of the code

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM