JavaFX Änderungen am Datenmodell visuell nicht sichtbar

prog6d

Mitglied
Hallo zusammen,

ich versuche eine Anwendung zu schreiben, die (hier als Beispiel) Filme verwalten soll. Hier mein Code:

[CODE lang="java" title="Main.java"]import java.util.ArrayList;

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.ScrollPane;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

public class Main extends Application {

ScrollPane root;
private ArrayList<Movie> movies;
Scene scene;

@SuppressWarnings("exports")
@Override
public void start(Stage stage) {
try {
this.root = new ScrollPane();
VBox vbox = new VBox();

// Beispielfilme holen
this.movies = getMovies();
// Filme zur VBox hinzufügen
for (Movie m : this.movies) {
createMovie(vbox, m);
}

// VBox am root platzieren
root.setContent(vbox);
scene = new Scene(root, 310, 300);
stage.setScene(scene);
stage.show();
} catch (Exception e) {
e.printStackTrace();
}
}

private ArrayList<Movie> getMovies() {
// Neue Liste mit zwei Beispielfilmen erstellen
ArrayList<Movie> list = new ArrayList<>();
list.add(new Movie("Hannibal"));
list.add(new Movie("Shining"));
return list;
}

private void createMovie(VBox vbox, Movie m) {
// Fügt Filme hinzu
GridPane moviePane = new GridPane();

// Titel des Films
Label title = new Label("Title: ");
moviePane.add(title, 0, 1);
moviePane.add(new Label(m.getTitle()), 1, 1);

// Button zum Löschen des Films
Button deleteButton = new Button("Delete Movie");
deleteButton.setOnAction(e -> {
// Film aus der Filmliste löschen
this.movies.remove(m);
});
moviePane.add(deleteButton, 1, 2);

vbox.getChildren().add(moviePane);
}

public static void main(String[] args) {
launch(args);
}
}[/CODE]

main() startet die JavaFX-Anwendung und die von javafx.application.Application geerbte Methode start() wird aufgerufen. Hier werden zwei Beispielfilme erstellt und - mit Hilfe von createMovie() - auf der Benutzeroberfläche platziert. Ein Film besteht aus einem Titel und einem dazugehörigen Button zum Löschen des Films aus der Filmliste vom Typ ArrayList<Movie>.

Das Betätigen des Lösch-Buttons (deleteButton) ruft die setOnAction()-Methode des Buttons auf und löscht den Film aus der Filmliste.

Das funktioniert soweit auch sehr gut. Mein Problem ist allerdings, dass die Änderungen an der Filmliste (ArrayList<Movie> movies) - also konkret das Löschen - sich nicht auf die GUI auswirken. Ich hätte erwartet, dass der gelöschte Film sofort von der GUI verschwindet.

Ich habe bereits recherchiert, ob es eine Art update()- bzw. refresh()-Methode gibt, die nach dem Löschen gesondert aufgerufen werden muss aber so wie ich es verstanden habe, sollte dies automatisch funktionieren.

Ich würde mich sehr freuen, wenn mir jemand bei meinem Problem helfen könnte.
 
Beste Antwort
G
Java:
        deleteButton.setOnAction(e -> {
            // Film aus der Filmliste löschen
            this.movies.remove(m);
        });
hier willst du es löschen

guddi .. tust du es da ? nö

du entfernst aus einer ArrayListe die irgendwo rum liegt etwas und denkst dass dies arrayliste irgendwas mit der liste ( childrenListe) der vbox zu tun hat
Java:
        deleteButton.setOnAction(e -> {
            // Film aus der Filmliste löschen
            this.movies.remove(m);
            vbox.getChildren().remove(moviepane);
        });
dann kills genauso wie du es hinzugefügt hast... natürlich wirst du im internet nichts finden was passt da du versuchst 2 Listen synchron zu machen die nix miteinander zu tun haben


zusätzlich solltest du...
G

Gelöschtes Mitglied 65838

Gast
Java:
        deleteButton.setOnAction(e -> {
            // Film aus der Filmliste löschen
            this.movies.remove(m);
        });
hier willst du es löschen

guddi .. tust du es da ? nö

du entfernst aus einer ArrayListe die irgendwo rum liegt etwas und denkst dass dies arrayliste irgendwas mit der liste ( childrenListe) der vbox zu tun hat
Java:
        deleteButton.setOnAction(e -> {
            // Film aus der Filmliste löschen
            this.movies.remove(m);
            vbox.getChildren().remove(moviepane);
        });
dann kills genauso wie du es hinzugefügt hast... natürlich wirst du im internet nichts finden was passt da du versuchst 2 Listen synchron zu machen die nix miteinander zu tun haben


zusätzlich solltest du eine Aufteilung von

Kalkulierende Methoden ( verwaltung der Film einträge... kommt ansich einer DB gleich )
Verhaltens Methoden ( on delete => mach kalkulierende sachen... pass view an)
Ansichsts Sachen ( die View... ist ansich einfach nur ein haufen von Nodes und nicht mehr )
 
Beste Antwort
G

Gelöschtes Mitglied 65838

Gast
Die Unterteilung nach MVC werde ich vornehmen. ;)
meine wortwahl war so gewählt weil es ansich wurscht ist ob du mvvm( wofür javafx gedacht war ) mvc oder mvp oder sonst was hernimmst

versuch einfach die riesen klassen zu vermeiden und kommunikation zwischen objekten zu verstehen darunter auch bindings die sind sehr wichtig in javafx ... ob die "pattern" optimal umgesetzt sind ist wurscht ansich am anfang
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
G JTextField Änderungen überprüfen AWT, Swing, JavaFX & SWT 4
W Swing JPanel nur einmal nach mehreren Änderungen neu zeichnen AWT, Swing, JavaFX & SWT 1
D Swing JTextComponent markieren bei Änderungen AWT, Swing, JavaFX & SWT 5
S JTable übernimmt Änderungen nicht AWT, Swing, JavaFX & SWT 2
G JavaFX TableView - Änderungen werden nicht übernommen. AWT, Swing, JavaFX & SWT 3
S Swing Auf Änderungen eines Models in der View einer JTable reagieren AWT, Swing, JavaFX & SWT 1
X Swing GUI-Änderungen mit invokeLater AWT, Swing, JavaFX & SWT 4
B Row und Cell Änderungen feststellen AWT, Swing, JavaFX & SWT 3
D Änderungen einer Card des CardLayouts zur Laufzeit AWT, Swing, JavaFX & SWT 6
M Swing Änderungen eines TextFelds und JOptionPane AWT, Swing, JavaFX & SWT 5
J JTable DefaultTableModel - Änderungen feststellen AWT, Swing, JavaFX & SWT 8
C Übernahme von Änderungen in einer JTable AWT, Swing, JavaFX & SWT 7
J Verzögerung bei Änderungen der Anzeige abwarten AWT, Swing, JavaFX & SWT 5
R Swing 2 jTables -2 Models - 1 Datenklasse: Änderungen AWT, Swing, JavaFX & SWT 11
M In Jlist auf Änderungen von mehreren JLabels reagieren AWT, Swing, JavaFX & SWT 3
Pithecanthropus [gelöst ]ActionListener soll nur Änderungen "bemerken" AWT, Swing, JavaFX & SWT 2
B Keine Änderungen an JLabel durch Array möglich AWT, Swing, JavaFX & SWT 12
U Beste Möglichkeit JTable-Änderungen in DB zu schreiben? AWT, Swing, JavaFX & SWT 14
S Textfeld soll auf Änderungen von nutzer und program reagiern AWT, Swing, JavaFX & SWT 3
P Änderungen in xml datei speichern AWT, Swing, JavaFX & SWT 7
A JTable Änderungen anzeigen (DefaultTableModel) AWT, Swing, JavaFX & SWT 5
T JTable Änderungen AWT, Swing, JavaFX & SWT 2
M Änderungen an JPanel nicht sichtbar AWT, Swing, JavaFX & SWT 8
S Swing: Änderungen in JLabel oder JTextField sofort anzeigen AWT, Swing, JavaFX & SWT 3
F Swing Datenmodell in Tree spiegeln ohne Adapterklassen AWT, Swing, JavaFX & SWT 5
K SWT Table Modell / Datenmodell AWT, Swing, JavaFX & SWT 14

Ähnliche Java Themen

Neue Themen


Oben