最後に、複数の試行の後、私はこれを達成する方法を見つけました。
以前私がテーブルデータとしてObservableListローカルSortedListのとFilteredList変数を使用します。今私はグローバルSortedListとFilteredList変数を使用しています。
ファイルからデータを読み込み、FilteredListにデータをロードしFilteredListを使用して、新しいグローバルSortedListのを作成します。 SortedList comparatorPropertyをテーブルcomparatorPropertyにバインドし、グローバルソートリストをテーブルに割り当てます。以下
各フィルタフィールド、次いで上記
filteredObjects = new FilteredList<>(objects, p -> true);
sortedObjects = new SortedList<>(filteredObjects);
sortedObjects.comparatorProperty().bind(tblPrimeCodeList.comparatorProperty());
tblPrimeCodeList.setItems(sortedObjects);
を行うためのコードは、各フィルタフィールドフィルタの値に基づいてデータを再度濾過される新しいChangeListenerを、追加されています。以下は、TextFieldフィルタの検索テーブルのコードです。以下は
txtFilter.textProperty().addListener((observable, oldValue, newValue) -> {
filteredObjects.setPredicate(obj -> {
if (!chkRel5.isSelected() && !chkRel6.isSelected()) {
return false;
}
if (newValue == null || newValue.isEmpty()) {
} else {
String lowerCaseFilter = newValue.toLowerCase();
if (obj.getName().toLowerCase().contains(lowerCaseFilter) ||
obj.getLocation().toLowerCase().contains(lowerCaseFilter)) {
} else {
return false;
}
}
if (chkLiveObj.isSelected() && !obj.getLive()) {
return false;
}
if (!chkRel5.isSelected() && obj.getVersion() == 5) {
return false;
}
if (!chkRel6.isSelected() && obj.getVersion() == 6) {
return false;
}
return true;
});
});
私はあなたがたとえば、一度に一つのフィルタをチェックすることをお勧めのCheckBox リリース5オブジェクト
chkRel5.selectedProperty().addListener(new ChangeListener<Boolean>() {
@Override
public void changed(ObservableValue<? extends Boolean> observable, Boolean oldValue, Boolean newValue) {
filteredObjects.setPredicate(obj -> {
if (!chkRel5.isSelected() && obj.getVersion() == 5) {
return false;
}
if (!chkRel6.isSelected() && obj.getVersion() == 6) {
return false;
}
if (chkLiveObj.isSelected() && !obj.getLive()) {
return false;
}
if (txtFilter.getText().trim().length() > 0) {
String lowerCaseFilter = txtFilter.getText().trim().toLowerCase();
if (obj.getName().toLowerCase().contains(lowerCaseFilter) ||
obj.getLocation().toLowerCase().contains(lowerCaseFilter)) {
} else {
return false;
}
}
return true;
});
sortedObjects = new SortedList<>(filteredObjects);
}
});
ためのコードです:リリース6つのオブジェクトを選択し、フィルタされた場合、最初のあなたがチェックすべてのフィルタがチェックされるまで、リリース5のオブジェクトが選択されていることを確認し、データをフィルタリングします。 – aleb2000
また、関連するコードを質問に追加できますか? – aleb2000