当前位置: 首页 > 知识库问答 >
问题:

JavaFX FXML标签不更新其值

阚亮
2023-03-14
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会按预期显示在标签中:

    public void initialize(){this.setid(“12”);}

    编辑:

    <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>
    
  • 共有1个答案

    郏稳
    2023-03-14

    您似乎有两个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,这就是正在显示的视图。然后创建另一个并获取controller。由于明显的原因,第二个控制器不会更新第一个视图。

    解决方案:

    FXMLLoader loader = new FXMLLoader(getClass().getResource("../resources/Client_show.fxml"));
    Parent view = loader.load();
    pane_clientDetail.getChildren().add(view);
    // rest of the code
    
     类似资料:
    • 问题内容: 我有一个活动,该活动的TabHost包含一组TabSpec,每个TabSpec都有一个listview,其中包含要由该选项卡显示的项目。创建每个TabSpec时,我设置一个图标以显示在选项卡标题中。 TabSpec是通过以下方法创建的,该方法循环创建适当数量的选项卡: 有几个实例,我希望能够更改程序执行过程中每个选项卡中显示的图标。目前,我正在删除所有选项卡,并再次调用上述代码以重新创

    • 不幸的是,我已经成为不断更新标签问题的牺牲品。在寻找解决方案时,我找到了一个有很多赞成票的答案,建议将我的标签绑定到StringProperty,然后每当更改StringProperty时,标签的文本就会随之更改。但是,我无法让它正常工作。 我知道这是某种线程问题。有没有办法使用DataBding解决方案等解决问题,或者线程是唯一的选择?如果线程是唯一的选择,你能给我指出正确的方向吗?我也没有找到

    • 对来说非常陌生,对控制器的工作方式缺乏一点了解,但现在就开始了。 我的问题很简单。我需要在运行时更新屏幕上的。 这个问题以前在这个网站上已经解决过: Java FX更改标签文本 Java FX更改标签文本2 传递参数 还有,这些链接描述的是同样的事情,但做的不同吗? 最后,具有应设置为的值的类: 我研究了依赖注入,尝试绑定和传递参数,但得到了相同的结果。我知道这是直截了当的,任何帮助都很感激!谢了

    • 问题内容: 我正在尝试在通过ajax 交换内容的上实现面包屑导航。 最终看起来像这样: 这是我的页面代码: 主页和页面都很简单。每当我更新的内容时,都需要更新Panel的一个。我确定 生产线会做到这一点。但是它是空的。标签不显示任何内容。 我希望在写问题时能找到答案-这可能很明显-但我仍然无法找到答案,所以我希望这里有人发现我的错误。 问题答案: 通过Ajax播放组件的可见性时, 除了之外 ,还必

    • 大家好,我在更新一些组件时遇到问题,我正在使用JSF、Primeface 5.3、Hibernate。 我有一个包含数据表的选项卡:选项卡1,我有另一个选项卡选项卡2,我想做的是当我更改选项卡2中的农学列并单击Guardar Cambios时,我想更新选项卡1的数据表。我可以更新数据库,当我注销并再次登录时,更改就在那里,但我想要不注销的更改。 这是我的管理员。xhtml: 我感谢你的帮助。

    • 谁能帮我解决这个问题,或者给我指出正确的方向? 我正在使用Python 3.9.7 我的目标是创建一个python程序,使用Tkinter显示两个变量之间的时间差,我希望这个变量在倒计时时每秒更新一次。 我已经创建了TK窗口,其中显示了标题文本和timedif标签,但是当我的程序运行时,timedif标签不会更新。Timedif标签仅显示程序执行时的timedelta。 我定义了一个函数count