JavaFX 8 TableView过滤
问题描述:
我阅读这篇文章: http://code.makery.ch/blog/javafx-8-tableview-sorting-filtering/ 但我有问题,包含长的值不是字符串的列。JavaFX 8 TableView过滤
@FXML
private TableView<Person> personTable;
@FXML
private TableColumn<Person, String> firstNameColumn;
@FXML
private TableColumn<Person, Long> lastNameColumn;
@FXML
private void initialize() {
// 0. Initialize the columns.
firstNameColumn.setCellValueFactory((TableColumn.CellDataFeatures<Person, String> cellData) -> {
return cellData.getValue().firstNameProperty();
});
firstNameColumn.setCellValueFactory(new Callback<TableColumn.CellDataFeatures<Person, String>,
ObservableValue<String>>() {
@Override
public ObservableValue<String> call(TableColumn.CellDataFeatures<Person, String> param) {
return new SimpleStringProperty("str"); // HERE IS OK
}
});
lastNameColumn.setCellValueFactory(new Callback<TableColumn.CellDataFeatures<Person, Long>, ObservableValue<Long>>() {
@Override
public ObservableValue<Long> call(TableColumn.CellDataFeatures<Person, Long> param) {
return new SimpleLongProperty(14L); // HERE IS WRONG
// Incompatible types.
// Required: ObservableValue<java.lang.Long>
// Found: SimpleLongProperty
}
});
我写在代码中的错误。
任何人都知道,我做错了什么?
谢谢。
答
有些违反直觉,LongProperty
实施ObservableValue<Number>
,而不是ObservableValue<Long>
。最简单的修复,它是否适合你的要求,将是使您的TableColumn
类型Number
:
@FXML
private TableColumn<Person, Number> lastNameColumn;
lastNameColumn.setCellValueFactory(new Callback<TableColumn.CellDataFeatures<Person, Number>, ObservableValue<Number>>() {
@Override
public ObservableValue<Number> call(TableColumn.CellDataFeatures<Person, Number> param) {
return new SimpleLongProperty(14L);
}
});
如果你真的需要列类型为Long
,那么你将需要做
lastNameColumn.setCellValueFactory(new Callback<TableColumn.CellDataFeatures<Person, Long>, ObservableValue<Long>>() {
@Override
public ObservableValue<Long> call(TableColumn.CellDataFeatures<Person, Long> param) {
return new SimpleObjectProperty<Long>(14L);
}
});