JavaFX/SceneBuilder StringProperty[值: ] 单元格中的文本

JavaFX/SceneBuilder StringProperty[value: ] text in cell

所以我正在为我的 Java/SQL 讲座做一个项目,内容是关于客户和这些客户可以租用的建筑物的管理工具。

我为我的客户创建了一个 .fxml,用于搜索 sql 数据库并显示它们,然后在 TableView 中显示它们。目前我只是在测试 GUI 并试图让这些东西正常工作,但我无法弄清楚如何将文本正确地放入我的 TableView 中。我为我的客户 (Kunde) 创建了一个 class,并为我的 customer.fxml 创建了控制器 class。我还为我的客户制作了一个 ObservableList,并将测试客户放入其中。 TableView 实际上 "shows" 行,但不仅仅是值,而是添加了“[...]属性 [value: ]”,然后是字符串的实际值。但我只想在细胞中拥有真正的价值。 Here是问题的小图

这是我的代码。我希望任何人都可以帮助我(一些评论或属性是德语的,但我仍然希望你能理解它的意思)。 客户控制器:

还有我的客户class:

package project.hausverwaltung.model;

import javafx.beans.property.SimpleIntegerProperty;
import javafx.beans.property.SimpleStringProperty;

public class Kunde {

    private SimpleStringProperty firstName;
    private SimpleStringProperty lastName;
    private SimpleStringProperty street;
    private SimpleStringProperty streetNumber;
    private SimpleIntegerProperty zip;
    private SimpleStringProperty city;
    private SimpleStringProperty birthDate;
    private SimpleIntegerProperty customerID;

    public Kunde(String firstName, String lastName, String street, String streetNumber, int zip, String city,
            int customerID, String birthDate) {
        this.firstName = new SimpleStringProperty(firstName);
        this.lastName = new SimpleStringProperty(lastName);
        this.street = new SimpleStringProperty(street);
        this.streetNumber = new SimpleStringProperty(streetNumber);
        this.zip = new SimpleIntegerProperty(zip);
        this.city = new SimpleStringProperty(city);
        this.birthDate = new SimpleStringProperty(birthDate);
        this.customerID = new SimpleIntegerProperty(customerID);
    }

    public SimpleStringProperty getFirstName() {
        return firstName;
    }

    public void setFirstName(SimpleStringProperty firstName) {
        this.firstName = firstName;
    }

    public SimpleStringProperty getLastName() {
        return lastName;
    }

    public void setLastName(SimpleStringProperty lastName) {
        this.lastName = lastName;
    }

    public SimpleStringProperty getStreet() {
        return street;
    }

    public void setStreet(SimpleStringProperty street) {
        this.street = street;
    }

    public SimpleStringProperty getStreetNumber() {
        return streetNumber;
    }

    public void setStreetNumber(SimpleStringProperty streetNumber) {
        this.streetNumber = streetNumber;
    }

    public SimpleIntegerProperty getZip() {
        return zip;
    }

    public void setZip(SimpleIntegerProperty zip) {
        this.zip = zip;
    }

    public SimpleStringProperty getCity() {
        return city;
    }

    public void setCity(SimpleStringProperty city) {
        this.city = city;
    }

    public SimpleStringProperty getBirthDate() {
        return birthDate;
    }

    public void setBirthDate(SimpleStringProperty birthDate) {
        this.birthDate = birthDate;
    }

    public SimpleIntegerProperty getCustomerID() {
        return customerID;
    }

    public void setCustomerID(SimpleIntegerProperty customerID) {
        this.customerID = customerID;
    }

}

我希望你们中的任何人都能给我一点提示,我的代码有什么问题以及如何修复它。非常感谢!

为您的模型class (Kunde) 使用JavaFX Properties pattern(这是常规Java Bean 模式的一个相当简单的扩展)。换句话说,您通过通常的 get/set 方法定义了一个名为 firstNameString 属性,它由一个可观察的 属性 实现,然后定义一个访问器属性 本身的方法。

您还应该一如既往地针对接口进行编程,而不是将实现 class 用作模型 class public API 的一部分。

具体来说,应该是这样的:

public class Kunde {

    // Properties:

    private final StringProperty firstName = new SimpleStringProperty();

    public StringProperty firstNameProperty() {
        return firstName ;
    }

    public final String getFirstName() {
        return firstNameProperty().get();
    }

    public final void setFirstName(String firstName) {
        firstNameProperty().set(firstName);
    }

    // similarly for other properties

    // Constructor:

    public Kunde(String firstName /* , ... */) {
        // Note there is no problem in calling setFirstName(...)
        // from the constructor as it is a final method:
        setFirstName(firstName);

        // ...
    }

}