FXML从pojo属性读取文本

时间:2015-10-10 14:32:06

标签: java javafx-8 fxml

我对JavaFX完全不熟悉,我正试图显示pojo属性的文字,如下所示:

public class Person {

    String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

public class PersonPresenter {

    @FXML
    private Person person;

    @PostConstruct
    private void initialize() {
        System.out.println("initialize");
        ReganteDTO regante = dao.getRegante(3);
        this.regante = new ReganteProperty(regante);
    }
}

我希望能够通过以下内容从fxml读取此人的姓名:

<GridPane [...] fx:controller="mypackage.PersonPresenter">
    <Text id="my-text" text="${person.name}"/>
</GridPane>

我能够找到google周围的每个字段都声明了属性。有没有更简单的方法来阅读(我不想修改)pojo的属性?

我正在使用加力燃烧室,但我认为这与我正在尝试做的事情无关。

1 个答案:

答案 0 :(得分:3)

我不确定我是否理解你的问题,只是为了给你一个关于何时使用特殊字符$的背景知识,以及我们如何在它有FXML时正常使用JavaFX应用程序,这里有一个简短的描述

JavaFX遵循MVP方法,其中视图是被动接口,并且演示者(监督控制器)负责在视图上显示数据之前检索数据并对其进行格式化。

enter image description here

如果您有模型,则需要在控制器中加载数据并让控制器处理视图。

public class PersonPresenter implements Initializable {    

    @FXML
    private Text myText;

    //Some how get the Person object reference
    Person person = getPerson();

    private void initialize() {
        myText.setText(person.getName());
    }
    ...
}

你的Fxml:

<GridPane [...] fx:controller="mypackage.PersonPresenter">
    <Text id="myText"/>
</GridPane>

如果将Person类的name属性设置为StringProperty,则可以将其值绑定到Text控件textProperty(),这将确保名称值的任何更改都将反映在文本中。

private void initialize() {
    myText.textProperty.bind(person.nameProperty);
}

有关FXML的其他信息

您可能希望使用$表示法加载值。

以下是JavaFX Pro书的一节:

<fx:define>
   <Date fx:id="capturedDate"/>
</fx:define>
<Label fx:id="currentDateLabel" text="$capturedDate"/>

定义的日期被赋予了captureDate的fx:id,标签使用了该文本的变量。最后,表达式绑定发生在TextField和Label:

之间
<TextField fx:id="textField"/>
<Label text="${textField.text}"/>

TextField被赋予textField的fx:id,标签绑定到表达式textField.text,标签的结果模仿了文本字段中输入的内容。

我希望你明白这个主意。您可以使用FXMLLoader setResources()将资源导入FXML,这对于加载键值对更有用。属性文件。