我是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);
}
正如你所看到的,通过这个:
TableView
结果:
我使用我创建的列获取了TableView但是没有显示数据。但是,数据似乎已放入表中,因为我可以选择表的前4行(4创建了Person的实例)。你可以在这里看到它:
我尝试了什么
setEditable
,refresh
这样的表/列上尝试过功能,但仍然没有显示数据:-( 我哪里错了?
非常感谢您的帮助。