我对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
的属性?
我正在使用加力燃烧室,但我认为这与我正在尝试做的事情无关。
答案 0 :(得分:3)
我不确定我是否理解你的问题,只是为了给你一个关于何时使用特殊字符$
的背景知识,以及我们如何在它有FXML时正常使用JavaFX应用程序,这里有一个简短的描述
JavaFX遵循MVP方法,其中视图是被动接口,并且演示者(监督控制器)负责在视图上显示数据之前检索数据并对其进行格式化。
如果您有模型,则需要在控制器中加载数据并让控制器处理视图。
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,这对于加载键值对更有用。属性文件。