J'ai récemment rencontré un problème intéressant. J'ai une table avec 1 int et 3 colonnes String. J'ai implémenté le filtrage pour la table qui fonctionne parfaitement bien sauf un point mineur: Chaque fois qu'il y a au moins un résultat filtré (mais moins que la quantité de lignes visibles), la colonne int affiche des valeurs nulles comme valeurs pour les lignes vides. Si le nombre de correspondances trouvées est cependant supérieur au nombre visible de lignes, aucune valeur nulle n'est ajoutée (même avec la fonctionnalité de défilement). Ceci est décrit le mieux avec les images:JavaFX TableView affiche des valeurs nulles
Filtre pour valeur non-existante ne présente pas les valeurs NULL:
Le code pour le filtrage:
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 usine:
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;
});
S'il vous plaît inclure le code qui définit la cellValueFactory de la première colonne. – VGR
Avez-vous une fabrique de cellules personnalisée dans cette colonne? Si oui, postez-le. À côté: réalisez-vous que vous ajoutez continuellement de plus en plus d'auditeurs à la propriété de texte du champ de texte? Finalement, cela mettra l'application à l'arrêt. Il n'est également pas nécessaire de créer une nouvelle liste triée chaque fois que le texte change. –
J'ai ajouté un cellValueFactory. James_D merci de l'avoir signalé ... Je suis encore nouveau à ce sujet donc je n'ai pas remarqué. – zotmer