In meinem Fenster habe ich eine TableView mit zwei Spalten.
Darüber eine Entfernen Schaltfläche und ein Textfeld zum Filtern der Liste.
Die Filterung funktioniert soweit ganz gut.
Wenn ich jedoch auf die Entfernen Schaltfläche klicke funktioniert die dahinterliegende Operation und löscht den selektierten eintrag.
Nach dem löschen des eintrages wird auch das Filterfeld geleert und die Vollständige Liste wird aktualisiert.
Soweit alles gut.
Wenn ich aber jetzt versuche wieder zu filtern dann funktioniert die Filterung nicht mehr?
Wie kann das sein das es am anfang einmal funktioniert und dann nicht mehr nachdem die entfernen Schaltfläche ausgeführt wurde.
Das ist die Filter-Methode die ich geschrieben habe
Und das ist die Methode zum löschen des selektierten eintrages
Ich habe in der Löschen Methode das Filter Textfeld schon mit .clear und "" zurückgesetzt aber ein weitere Filtern war nicht
mehr möglich.
Ich würd emich freuen wenn jemand einen Trip hat waran es liegen könnte.
Vielen Dank
Darüber eine Entfernen Schaltfläche und ein Textfeld zum Filtern der Liste.
Die Filterung funktioniert soweit ganz gut.
Wenn ich jedoch auf die Entfernen Schaltfläche klicke funktioniert die dahinterliegende Operation und löscht den selektierten eintrag.
Nach dem löschen des eintrages wird auch das Filterfeld geleert und die Vollständige Liste wird aktualisiert.
Soweit alles gut.
Wenn ich aber jetzt versuche wieder zu filtern dann funktioniert die Filterung nicht mehr?
Wie kann das sein das es am anfang einmal funktioniert und dann nicht mehr nachdem die entfernen Schaltfläche ausgeführt wurde.
Das ist die Filter-Methode die ich geschrieben habe
Java:
private void filterMimeListe(String filterText) {
if (mimeListe == null) {
return;
}
// Erstellen Sie eine finale Referenz auf mimeListe
final ObservableList<String[]> finalMimeListe = mimeListe;
// Erstellen Sie eine Instanz von FilteredList
FilteredList<String[]> filteredList = new FilteredList<>(finalMimeListe);
// Fügen Sie einen Predicate hinzu, um zu definieren, welche Elemente in der gefilterten Liste angezeigt werden sollen
filteredList.setPredicate(mimeEintrag -> {
if (filterText == null || filterText.isEmpty()) {
// Wenn das Textfeld leer ist, zeigen Sie alle Elemente an
return true;
}
// Überprüfen, ob der MIME-Typ oder die Endung den Suchbegriff enthält
String mimeType = mimeEintrag[0].toLowerCase();
String fileExtension = mimeEintrag[1].toLowerCase();
return mimeType.contains(filterText.toLowerCase()) || fileExtension.contains(filterText.toLowerCase());
});
// Setzen Sie die gefilterte Liste als Datenquelle für den TableView
einstellungenMimeListeTableView.setItems(filteredList);
} // filterMimeListe
Und das ist die Methode zum löschen des selektierten eintrages
Java:
@FXML
void entferneEintragMimeListe(ActionEvent event) {
System.out.println("Die Liste hat " + mimeListe.size() + " Einträge");
// Ausgabe der aktuellen Liste auf der Konsole
System.out.println("Aktuelle MIME-Liste:");
for (String[] eintrag : mimeListe) {
System.out.println(Arrays.toString(eintrag));
}
// Überprüfen, ob ein Eintrag ausgewählt wurde
if (einstellungenMimeListeTableView.getSelectionModel().isEmpty()) {
System.out.println("Kein Eintrag ausgewählt.");
return;
}
// Abrufen des ausgewählten Eintrags
String[] ausgewaehlterEintrag = einstellungenMimeListeTableView.getSelectionModel().getSelectedItem();
if (ausgewaehlterEintrag == null) {
System.out.println("Ausgewählter Eintrag ist null.");
return;
}
// Überprüfen, ob der ausgewählte Eintrag in der Liste vorhanden ist
boolean gefunden = false;
for (String[] eintrag : mimeListe) {
if (Arrays.equals(eintrag, ausgewaehlterEintrag)) {
gefunden = true;
break;
}
}
if (!gefunden) {
System.out.println("Ausgewählter Eintrag ist nicht in der Liste vorhanden.");
System.out.println("Der ausgewählte Eintrag ist: " + Arrays.toString(ausgewaehlterEintrag));
return;
}
// Entfernen des ausgewählten Eintrags aus der Liste
mimeListe.remove(ausgewaehlterEintrag);
// Ausgabe der aktualisierten Liste auf der Konsole
System.out.println("Aktualisierte MIME-Liste nach Entfernen:");
for (String[] eintrag : mimeListe) {
System.out.println(Arrays.toString(eintrag));
}
// Aktualisieren der Konfigurationsdatei auf der Festplatte
Path configFile = Paths.get(System.getProperty("user.home"), "DMS", "mime-zu-endung.properties");
try {
List<String> lines = new ArrayList<>();
for (String[] eintrag : mimeListe) {
lines.add(String.join("=", eintrag));
}
Files.write(configFile, lines);
System.out.println("Aktualisierte Konfigurationsdatei wurde erfolgreich geschrieben.");
} catch (IOException e) {
System.err.println("Fehler beim Schreiben der Konfigurationsdatei: " + e.getMessage());
e.printStackTrace();
}
// Zurücksetzen des Filterfelds auf leeren String und Auslösen eines neuen Filter-Events
einstellungenDateiMimeFilterTextField.setText("");
// einstellungenDateiMimeFilterTextField.fireEvent(new ActionEvent());
// Aktualisieren der Anzeige auf dem JavaFX Application Thread
Platform.runLater(() -> {
einstellungenMimeListeTableView.setItems(FXCollections.observableArrayList(mimeListe));
lblAnzahlMimeEintraege.setText(String.valueOf(mimeListe.size()));
});
}
Ich habe in der Löschen Methode das Filter Textfeld schon mit .clear und "" zurückgesetzt aber ein weitere Filtern war nicht
mehr möglich.
Ich würd emich freuen wenn jemand einen Trip hat waran es liegen könnte.
Vielen Dank