您可以使用FilteredList
ObservableList<YourObjectClass> actualList = ...;
FilteredList<YourObjectClass> filteredList = new FilteredList<>(actualList);
TableView table = ...;
table.setItems(filteredList);
// to filter
filteredList.setPredicate(
new Predicate<YourObjectClass>(){
public boolean test(YourObjectClass t){
return false; // or true
}
}
);
Run Code Online (Sandbox Code Playgroud)
像挥杆一样快((可能快于挥杆...)。(我测试了100000行)
我使用这段代码进行过滤,但实际上我没有在大数据情况下进行测试
textField.textProperty().addListener(new InvalidationListener() {
@Override
public void invalidated(Observable observable) {
if(textField.textProperty().get().isEmpty()) {
tableView.setItems(dataList);
return;
}
ObservableList<ClassModel> tableItems = FXCollections.observableArrayList();
ObservableList<TableColumn<ClassModel, ?>> cols = tableView.getColumns();
for(int i=0; i<dataList.size(); i++) {
for(int j=0; j<cols.size(); j++) {
TableColumn col = cols.get(j);
String cellValue = col.getCellData(dataList.get(i)).toString();
cellValue = cellValue.toLowerCase();
if(cellValue.contains(textField.textProperty().get().toLowerCase())) {
tableItems.add(data.get(i));
break;
}
}
}
tableView.setItems(tableItems);
}
});
Run Code Online (Sandbox Code Playgroud)
其中 ClassModel 是您的模型类
| 归档时间: |
|
| 查看次数: |
14710 次 |
| 最近记录: |