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

轻松地将许多JavaFX属性绑定到UI节点

周麒
2023-03-14

我在一个应用程序上工作,该应用程序向SQL数据库询问不同的值。这里我有一个近40列的表,我的pojos有JavaFX-Properties。所以现在我将填充数据库数据的属性绑定到UI组件,如文本字段等。

我现在的做法是手动将所有ui属性绑定到pojo属性。但这是一个很大的方法,有40个条目可以手动绑定所有属性。

你能告诉我一个更好的方法吗?也许像javafx的表系统一样通过字符串绑定属性?

@詹姆斯·丁:谢谢你的回复。我的想法是用我在fxml中设置的字符串值扩展textfields等,该字符串=要绑定的属性的名称。这很像javafx表的映射系统。

@kelopatra:我不想用值填充表格。我已经准备好了这个系统。我想要的是自动化ui和pojo之间的绑定过程。例如:

这是我的pojo,其中填充了值表单数据库:

public class SimplePojo {

private final StringProperty button_propertie = new SimpleStringProperty();
private final StringProperty lable_propertie = new SimpleStringProperty();

public SimplePojo(String button, String lable){
    this.button_propertie.setValue(button);
    this.lable_propertie.setValue(lable);
}

public String getLable_propertie() {
    return lable_propertie.get();
}

public void setLable_propertie(String value) {
    lable_propertie.set(value);
}

public StringProperty lable_propertieProperty() {
    return lable_propertie;
}

public String getButton_propertie() {
    return button_propertie.get();
}

public void setButton_propertie(String value) {
    button_propertie.set(value);
}

public StringProperty button_propertieProperty() {
    return button_propertie;
}

这是我的控件,用于向用户显示值:

public class FXMLDocumentController implements Initializable {

@FXML
private Label label;
@FXML
private Button button;

@Override
public void initialize(URL url, ResourceBundle rb) {
    //Getting result from Database
    SimplePojo sp = new SimplePojo("label_text", "button_text");
    //Bind properties to ui elements
    doBindings(sp);
}    

public void doBindings(SimplePojo sp){
    this.button.textProperty().bindBidirectional(sp.button_propertieProperty());
    this.label.textProperty().bindBidirectional(sp.lable_propertieProperty());
    //If i have 50 fields in pojo ... this would not end ....
}

在控制器这里是问题...看看“doBindings”中的评论...这个列表几乎不会结束!

共有1个答案

许兴文
2023-03-14

谢谢你的帮助。因此,总之,我们可以说,不可能自动将属性绑定到UI元素的过程,必须手动完成。将来有一个计划支持FXML中的双向绑定。kleopatra链接:http://fxexperience.com/2011/10/fxml-why-it-rocks-and-the-next-phase/

 类似资料:
  • 我正在开发一个简单的Java程序来完成一些简单的mySQL内容。它有一个用JavaFX制作的小GUI。 GUI的控制器有一个SimpleBoleanProperty,我们称之为X,它指示到数据库的连接状态。我将一些简单的东西绑定到它,比如按钮的disableProperty so send querys,如果没有连接,应该禁用它。到现在为止,一直都还不错。 我有一个标签,用于执行以下操作: 如果X

  • 问题内容: 我有一个带有文本字段和按钮的简单fxml。如果文本字段为空,我想禁用按钮。所以我在控制器中插入如下内容: ..那很好。问题是当我添加第二个文本字段时,如果其中一个文本字段为空,希望禁用我的按钮。那该怎么办?我尝试了以下操作,但这不起作用: 问题答案: 可以通过以下方式绑定到布尔表达式:

  • 我有一个带有文本字段和按钮的简单fxml。如果文本字段为空,我想禁用按钮。所以我在我的控制器中插入如下内容: ..这很好用。问题是,当我添加第二个文本字段时,如果其中一个文本字段为空,我希望禁用我的按钮。那怎么办呢?我尝试了以下方法,但不起作用:

  • 我想做的是: 我有一个JavaFX窗口,我通过拖动不断改变它的宽度和高度。然后的文本具有以下格式: 例子: 我想使用绑定,而不是使用2(两)个ChangeListeners来实现这一点。 我也读过这个问题JavaFX绑定到多个属性

  • 想象一下我有一个POJO,比如: 如果我需要使用bind()方法将name成员绑定到JavaFX标签,我不能应用,因为我需要一个可观察值。 我知道我可以使用StringProperty代替String,但是我需要基本类型,因为我使用Hibernate,我不知道Hibernate是否可以支持JavaFX的属性来映射DB中的数据。 我必须将哪些备选方案从我的 pojo 绑定到 JavaFX 控件?

  • 我有一个预览页面,需要添加或编辑模型,并显示预览。 我需要从添加表单页和编辑表单页调用预览。我要通过的模型是相同的,但来自不同的形式。 (1) ModelAttribute是否有支持这种多属性名称映射的方法?(2) 我怎么能考虑重新设计这个?考虑(a)在表单提交之前重命名表单名称/属性以使用相同的属性名称。(b) 完全删除ModelAttribute——这不是我的选项,因为我使用的是SpringM