[英]Get unfiltered Java FX TableView columns
我有一個TableView,其中的行根據您在TextField中鍵入的內容進行過濾,該文本使用以下代碼搜索所有列:
FilteredList<CommandeFX> filteredData = new FilteredList<>(data, p -> true);
// 2. Set the filter Predicate whenever the filter changes.
filterField.textProperty().addListener((observable, oldValue, newValue) -> {
filteredData.setPredicate(commande -> {
// If filter text is empty, display all persons.
if (newValue == null || newValue.isEmpty()) {
return true;
}
// Compare first name and last name of every person with filter text.
String lowerCaseFilter = newValue.toLowerCase();
if (String.valueOf(commande.getCodeCommande()).toLowerCase().contains(lowerCaseFilter)) {
return true;
// Filter matches first name.
} else if (String.valueOf(commande.getCMD()).toLowerCase().contains(lowerCaseFilter)) {
return true; // Filter matches last name.
}
else if (String.valueOf(commande.getClient()).toLowerCase().contains(lowerCaseFilter)) {
return true; // Filter matches last name.
}
else if (String.valueOf(commande.getFournisseur()).toLowerCase().contains(lowerCaseFilter)) {
return true; // Filter matches last name.
}
else if (String.valueOf(commande.getQuantite()).toLowerCase().contains(lowerCaseFilter)) {
return true; // Filter matches last name.
}
else if (String.valueOf(commande.getPrixCommande()).toLowerCase().contains(lowerCaseFilter)) {
return true; // Filter matches last name.
}
else if (String.valueOf(commande.getSommeProperty()).toLowerCase().contains(lowerCaseFilter)) {
return true; // Filter matches last name.
}
else if (String.valueOf(commande.getResteCommandeProperty()).toLowerCase().contains(lowerCaseFilter)) {
return true; // Filter matches last name.
}
else if (String.valueOf(commande.getDateCommande()).toLowerCase().contains(lowerCaseFilter)) {
return true; // Filter matches last name.
}
else if (String.valueOf(commande.getDateReception()).toLowerCase().contains(lowerCaseFilter)) {
return true; // Filter matches last name.
}
else if (String.valueOf(commande.getModified()).toLowerCase().contains(lowerCaseFilter)) {
return true; // Filter matches last name.
}
else if (String.valueOf(commande.getValide()).toLowerCase().contains(lowerCaseFilter)) {
return true; // Filter matches last name.
}
return false; // Does not match.
});
});
// 3. Wrap the FilteredList in a SortedList.
SortedList<CommandeFX> sortedData = new SortedList<>(filteredData);
// 4. Bind the SortedList comparator to the TableView comparator.
sortedData.comparatorProperty().bind(tableCommandes.comparatorProperty());
// 5. Add sorted (and filtered) data to the table.
tableCommandes.setItems(sortedData);
到目前為止沒有問題,我還使用這些代碼行根據列值(該列的標題為“ reste”)來更改某些列的樣式(在我的情況下為顏色):
reste.setCellFactory(column -> {
return new TableCell<CommandeFX, Number>() {
@Override
protected void updateItem(Number item, boolean empty) {
super.updateItem(item, empty);
setText(empty ? "" : getItem().toString());
setGraphic(null);
TableRow<BonFX> currentRow = getTableRow();
if (!isEmpty()) {
if(Float.valueOf((float) item)>0)
currentRow.setStyle("-fx-background-color:lightcoral");
}
}
};
});
當我過濾行時,假設我有三行都用紅色上色,過濾后我剩下了顯示的一行並用紅色上色,太棒了! 問題是盡管沒有顯示兩個不可見的行,它們仍然顯示為紅色! 如何禁用樣式可見的樣式行? 非常感謝
如果您的行為空,則設置其默認顏色:
reste.setCellFactory(column -> {
return new TableCell<CommandeFX, Number>() {
@Override
protected void updateItem(Number item, boolean empty) {
super.updateItem(item, empty);
TableRow<BonFX> currentRow = getTableRow();
if (empty || item == null) {
setText("");
setGraphic(null);
currentRow.setStyle("-fx-background-color:(****your default color****)");
} else {
setText(getItem().toString());
}
if (!isEmpty()) {
if (Float.valueOf((float) item) > 0) {
currentRow.setStyle("-fx-background-color:lightcoral");
}
}
}
};
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.