我最近遇到了一個有趣的問題。我有一個表有1個int和3個字符串列。我已經實現了對錶格的過濾,除了一個小點之外,它完美地工作正常:每當至少有一個過濾結果(但少於可見行的數量)時,int列顯示爲空行值。如果找到的匹配數量大於可見的行數,則不會添加空值(即使使用滾動功能)。這最好與圖片說明:JavaFX TableView顯示空值
爲不存在的值過濾器不顯示空值:
FilteredList<Word> filteredData = new FilteredList<>(masterData,e->true);
SortedList<Word> sortedData = new SortedList<>(filteredData);
sortedData.comparatorProperty().bind(table.comparatorProperty());
table.setItems(sortedData);
TextField filter = new TextField();
filter.setPromptText("Filter");
filter.textProperty().addListener((observableValue,oldValue,newValue)->{
filteredData.setPredicate((Predicate<? super Word>) word->{
if(word.getAllCz().toLowerCase().contains(newValue.toLowerCase()))return true;
else if(word.getAllEng().toLowerCase().contains(newValue.toLowerCase()))return true;
else if(String.valueOf(word.getUnitNo()).equals(newValue))return true;
else return false;
});
});
CellValue:
用於濾波的代碼工廠:
column.setCellValueFactory(new PropertyValueFactory<>(data));
column.setCellFactory(tc-> {
TableCell<Word, Integer> cell = new TableCell<>();
Text text = new Text();
cell.setGraphic(text);
text.setTextAlignment(TextAlignment.CENTER);
text.setStyle("-fx-fill: -fx-text-background-color;");
text.setFontSmoothingType(FontSmoothingType.LCD);
text.wrappingWidthProperty().bind(column.widthProperty().subtract(5));
text.textProperty().bind(cell.itemProperty().asString());
return cell;
});
請包括設置第一列的cellValueFactory的代碼。 – VGR
您是否在該列上有自定義單元工廠?如果是這樣,請發佈。另外:你是否意識到你不斷地在文本字段的文本屬性中添加越來越多的監聽器?最終這會使應用程序停滯不前。每次文本更改時,也不需要創建新的排序列表。 –
我已經添加了一個cellValueFactory。 James_D感謝你指出了這一點..我還是新來的,所以我沒有注意到。 – zotmer