JavaFX和FXML - TableView中没有显示数据

时间:2016-07-11 12:05:05

标签: javafx tableview fxml scenebuilder display

我是JavaFX的新手,我正在尝试基本的功能。我也使用SceneBuilder(FXML)来创建我的视图。

我使用SceneBuilder创建了一个TableView,没有列(将在代码中添加),标识为tablePeople目标是将人员存储到此表中,就像许多基本使用TableView的示例一样。 这是我的Person类(我想在表中存储此类的每个属性):

public class Person {

private SimpleStringProperty name;
private SimpleStringProperty forename;
private ObjectProperty<LocalDate> date; 
private SimpleStringProperty message;

    public Person(String name, String forename, LocalDate date, String message) {
        this.name = new SimpleStringProperty(name);
        this.forename = new SimpleStringProperty(forename);
        this.date = new SimpleObjectProperty<LocalDate>(date);
        this.message = new SimpleStringProperty(message);
    }

    // all getters/setters here
}

我正确地从FXML获取了我的TableView:

@FXML
private TableView<Person> tablePeople;

在应用程序开始时(加载FXML之后和显示阶段之前),我使用我在FXML控制器中创建的方法用随机数据填充TableView

public void initParametersView() {
    tablePeople.setEditable(true);
    tablePeople.setDisable(false);
    String dateStr = "01.01.2001";
    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd.MM.yyyy");
    LocalDate date = null;
    date = LocalDate.parse(dateStr,formatter);
    ObservableList<Person> people = FXCollections.observableArrayList(

                new Person("Name1", "Forename1", date, "a"),
                new Person("Name2", "Forename2", date, "b"),
                new Person("Name3", "Forename3", date, "c"),
                new Person("Name4", "Forename4", date, "d")

            );

    tablePeople.setItems(people);

    TableColumn<Person, String> tcName = new TableColumn<>("Name");
    tcName.setCellValueFactory(new PropertyValueFactory<Person,String>("name"));
    tablePeople.getColumns().add(tcName);

    TableColumn<Person, String> tcForename = new TableColumn<>("Forename");
    tcForename.setCellValueFactory(new PropertyValueFactory<Person,String>("forename"));
    tablePeople.getColumns().add(tcForename);

    TableColumn<Person, LocalDate> tcDate = new TableColumn<>("Date");
    tcDate.setCellValueFactory(new PropertyValueFactory<Person,LocalDate>("date"));
    tablePeople.getColumns().add(tcDate);

    TableColumn<Person, String> tcMessage = new TableColumn<>("Message");
    tcMessage.setCellValueFactory(new PropertyValueFactory<Person,String>("message"));
    tablePeople.getColumns().add(tcMessage);

}

正如你所看到的,通过这个:

  • 我创建了一个给予表的Observable Person of Person。
  • 我使用Person的属性值创建每个列(应该......)并将其添加到TableView

结果:

我使用我创建的列获取了TableView但是没有显示数据。但是,数据似乎已放入表中,因为我可以选择表的前4行(4创建了Person的实例)。你可以在这里看到它: Result

我尝试了什么

  • 我首先尝试使用SceneBuilder创建我的列,将它们放在我的控制器中并直接设置单元格值,但结果相同。
  • 我在setEditablerefresh这样的表/列上尝试过功能,但仍然没有显示数据:-(

我哪里错了?

非常感谢您的帮助。

0 个答案:

没有答案