JavaFX mvvmfx - Model

Bela B.

Aktives Mitglied
Hallo zusammen,

ich baue gerade meine Software mit mvvmfx, aber bin mir unsicher, wie ich denn das Model an die/das ViewModel binde.

Was macht mein Programm: Ich will damit meine Offsite-Backups meiner Mediendateien verwalten. Diese sind ausgelagert, d.h. ich erstelle von meiner Live-Version eine JSON, die ich dann, wenn ich zu meinem Offsite-Backup fahre, lade ich dann die JSON und lasse mir die Diff zu dem Backupstand ausgeben.
Das funktioniert alles soweit. Dafür habe ich einige Klassen (wie z.B. Movie, TV-Show, Video) und erstelle mir damit dann Collections, die ich dann in die JSON über GSON ausleite.

Ohne GUI habe ich es soweit lauffähig, aber ich kapiere einfach nicht so recht, wie und wo ich nun die Verbindung zu den ViewModels machen soll.
mvvmfx bietet ja den ModelWrapper an, aber was gebe ich da an? Kennt jemand eine Beispielanwendung, die nicht all zu kompliziert ist, aber mit mvvmfx ein Model mit mehreren Klassen hat? Bisher habe ich immer welche gefunden, bei denen dann das Model immer nur aus einer Klasse z.B. Person oder Task oder Meeting bestand. (das wäre dann ja gleichbedeutend, wenn ich nur eine Klasse Video z.B. hätte).

Vielen Dank, komme da überhaupt nicht weiter.
 

looparda

Top Contributor
Wie sieht denn deine Klassenstruktur aus und was willst du anzeigen? Gib einen View und deine Daten vor und dann kann man zeigen, wie du das Binding machst.

Im Grunde besteht dein ViewModel einfach aus Properties, die mit dem View über Bindings verbunden werden. Im ViewModel hast du eine Methode, die im einfachsten Fall ein Model entgegennimmt und die Werte auf die Properties setzt.
 

Bela B.

Aktives Mitglied
Wie sieht denn deine Klassenstruktur aus und was willst du anzeigen? Gib einen View und deine Daten vor und dann kann man zeigen, wie du das Binding machst.
Ich habe z.B. eine Klasse Video, die folgende Attribute hat:
Java:
public class Video {
    private static final Logger LOGGER = LoggerFactory.getLogger(Video.class.getName());

    private UUID id;
    private String user;
    private String name;
    private File path;
    private String hash;
    private long size;

//[...weitere Methoden, z.B. zur Ermittlung der Größe der Datei um size zu setzen]
}
Diese Klasse befindet sich in einem Package namens media. Bisher habe ich in meiner Main-Methode als nun über ein Verzeichnis iteriert und dabei für jedes Unterverzeichnis (=> Videoverzeichnis) ein neues Objekt davon erzeugt und in einer Collection<Video> videoList = new ArrayList() abgelegt.

Diese Collection will ich dann in einem TreeTableView anzeigen. Die View dazu liegt in einem Package ui, also dann eine RootView.class und eine RootViewModel.class und bei den Resources entsprechend auch mit Package-Struktur die RootView.fxml.

Meine Frage jetzt hier zu: Wo mache ich denn jetzt am besten das Iterieren über das Verzeichnis zur Erzeugen der Collection<Video> und wie funktioniert dann das Binding?
Bis habe ich mich nur etwas mit dem Property-Binding bei Standardtypen (wie String, Integer, ...) beschäftigt, aber habe noch keine Ahnung, wie ich eine Collection oder ähnliches binde.
 

looparda

Top Contributor
Meine Frage jetzt hier zu: Wo mache ich denn jetzt am besten das Iterieren über das Verzeichnis zur Erzeugen der Collection<Video> und wie funktioniert dann das Binding?
Bis habe ich mich nur etwas mit dem Property-Binding bei Standardtypen (wie String, Integer, ...) beschäftigt, aber habe noch keine Ahnung, wie ich eine Collection oder ähnliches binde.
Dein TreeTableView hält Instanzen von z.B. "VideoItemViewModel". Mit der CellValueFactory machst du das Mapping zwischen View und ViewModel.
Java:
@FXML private TreeTableColumn<VideoItemViewModel, String> uuidCol;
...
uuidCol.setCellValueFactory(new TreeItemPropertyValueFactory<>("uuid"));
Dein ViewModel ist wirklich ganz einfach:
Java:
public class VideoItemViewModel implements ViewModel  {

    private final StringProperty uuid = new SimpleStringProperty(this,"uuid");
    private final StringProperty name = new SimpleStringProperty(this, "name");
    private final StringProperty user = new SimpleStringProperty(this, "user");
    ...

    public VideoItemViewModel(Video video) {
        uuid.set(video.getId().toString());
        name.set(video.getName());
        user.set(video.getUser());
    }

    public StringProperty uuidProperty() {
        return uuid;
    }

    public StringProperty nameProperty() {
        return name;
    }

    public StringProperty userProperty() {
        return user;
    }
}
Dem TreeTableView gibst du ja nur ein root TreeItem<T> und die Kinder sind einem Item/einer Node immer bekannt. Du musst also über die TreeItem<T> Klasse einen Weg finden deine VideoItemViewModel pro Video zu erzeugen.
Auf Anhieb habe ich dazu eine Klasse gefunden, vom Maintainer von mvvmFX: https://gist.github.com/lestard/011e9ed4433f9eb791a8

Du liest dein Verzeichnis mit Unterverzeichnissen rekursiv ein und packst deine Videos in einen Baum. Der RecursiveTreeItem holt sich dann immer die Kindelemente und mappt sie zu ViewItems.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Ernesto95 JavaFX mvvmFX AWT, Swing, JavaFX & SWT 7
C Default table model aktualisieren AWT, Swing, JavaFX & SWT 7
A ViewController (IFrame) > Jdialog > Model AWT, Swing, JavaFX & SWT 1
J Saubere Trennung Model, View, Controller Javafx AWT, Swing, JavaFX & SWT 10
F JComboBox und Model AWT, Swing, JavaFX & SWT 10
S UI Model Binding AWT, Swing, JavaFX & SWT 7
F jTree und das Model aus einer eigenen Klasse AWT, Swing, JavaFX & SWT 1
ralfb1105 JavaFX Exception Message von Model Class via Controller in View darstellen AWT, Swing, JavaFX & SWT 39
ralfb1105 JavaFX MVC: Thread in Model Class mit Ausgabe in TextArea AWT, Swing, JavaFX & SWT 10
J JavaFX - mehrere Views, Model durchreichen AWT, Swing, JavaFX & SWT 10
T JavaFX Model Daten übergeben AWT, Swing, JavaFX & SWT 4
S Zwei JTree, ein Model, bei Selection im ersten JTree soll der zweite die Inhlate anzeigen AWT, Swing, JavaFX & SWT 2
M JList Model filtern AWT, Swing, JavaFX & SWT 4
O Swing JTextField Sync View -> Model AWT, Swing, JavaFX & SWT 3
S Swing Tabelle mit Model bei eingeschaltetem Filter synchronisieren AWT, Swing, JavaFX & SWT 6
P jTable model setzen AWT, Swing, JavaFX & SWT 6
D SWT TreeViewer: Daten aus Model gelöscht... trotzdem noch im Baum AWT, Swing, JavaFX & SWT 4
F Swing GUI und Model mit Timer AWT, Swing, JavaFX & SWT 13
earlgrey_tea JTextfield Model AWT, Swing, JavaFX & SWT 14
L Swing Model für ComboBox AWT, Swing, JavaFX & SWT 14
O Swing JTable - Zeilen färben (mit Model) AWT, Swing, JavaFX & SWT 13
C Swing JTable verbindet sich nicht mit Model AWT, Swing, JavaFX & SWT 20
D Swing JList <-> AdapterModel <-> Model AWT, Swing, JavaFX & SWT 4
C Swing MVC Verbindung von Model und Db AWT, Swing, JavaFX & SWT 23
R Model View Controller Konzept AWT, Swing, JavaFX & SWT 2
N update model nach dem filtern AWT, Swing, JavaFX & SWT 2
R Swing Designfrage - Zusammenspiel Model / View AWT, Swing, JavaFX & SWT 10
D Swing JList, CellRenderer und Model AWT, Swing, JavaFX & SWT 6
J Swing SwingActions und das Problem auf den View bzw. das Model zuzugreifen AWT, Swing, JavaFX & SWT 2
K Swing JTable Model aktualisieren AWT, Swing, JavaFX & SWT 2
C Swing JComboBox probleme bei Set Model AWT, Swing, JavaFX & SWT 5
T JTable Model AWT, Swing, JavaFX & SWT 5
D Swing JTable Model View Problem AWT, Swing, JavaFX & SWT 6
F unspezifizierte Frage zu JTable/ Model AWT, Swing, JavaFX & SWT 6
D ComboBox-Model mit Observer AWT, Swing, JavaFX & SWT 3
M Swing Model an View binden AWT, Swing, JavaFX & SWT 4
R Zugriff auf Model im MVC-Design aus SwingWorker heraus AWT, Swing, JavaFX & SWT 3
Z JLIST / Model erster EINTRAG AWT, Swing, JavaFX & SWT 11
G Model,Listener und background jobs AWT, Swing, JavaFX & SWT 4
X Swing JList -> Daten anders darstellen als im Model hinterlegt -> möglich ? AWT, Swing, JavaFX & SWT 9
N Model Aktualisieren AWT, Swing, JavaFX & SWT 4
N Swing JComboBox: Auf Model- und Selectionänderungen reagieren AWT, Swing, JavaFX & SWT 2
D JTable, Model, Fokus AWT, Swing, JavaFX & SWT 3
hdi Swing JTable: Löschen vom Daten im Model AWT, Swing, JavaFX & SWT 7
R Swing alle Frames nutzen das gleiche Model AWT, Swing, JavaFX & SWT 2
S JList mit Vector als Model? AWT, Swing, JavaFX & SWT 12
S JTree mit Daten aus Model füllen, eigenes TreeModel (gute Dokumentation des Problems) AWT, Swing, JavaFX & SWT 2
J JTable Model laesst sich nicht serialisieren? AWT, Swing, JavaFX & SWT 16
D ComboBox(Model) mit dummyItem AWT, Swing, JavaFX & SWT 10
G JComboBox mit eigenem Model vorhanden, wie selektieren AWT, Swing, JavaFX & SWT 29
M MVC: Grundidee verstanden aber was machen mit mehreren Model AWT, Swing, JavaFX & SWT 2
V JList ist leer -Model ist voll. Ja, ne is klaaa. AWT, Swing, JavaFX & SWT 8
K JSpinner - Model <-> View, unterschiedliche Werte AWT, Swing, JavaFX & SWT 9
W Suche großes vollständiges Swing GUI Beispiel nach MVC Model AWT, Swing, JavaFX & SWT 5
P jTable mit Model lässt sich nicht neu laden AWT, Swing, JavaFX & SWT 5
P JTable/Model füllen mit Fortschrittsbalken, Var. Rückgabetyp AWT, Swing, JavaFX & SWT 2
J model von jcombobox AWT, Swing, JavaFX & SWT 4
D Swing und MVC und doppeltes Model? AWT, Swing, JavaFX & SWT 5
G JTable und Model AWT, Swing, JavaFX & SWT 21
B View zeichnet Daten aus dem Model ohne Update AWT, Swing, JavaFX & SWT 4
J JTable / Model Daten verändern AWT, Swing, JavaFX & SWT 5
C Model View Controller - Beispielimplementation AWT, Swing, JavaFX & SWT 5
C [JTable] ArrayIndexOutOfBoundsException im Model AWT, Swing, JavaFX & SWT 8
Icewind Jlist zeigt neue elemente im model nicht sofort an AWT, Swing, JavaFX & SWT 3
Icewind JTable zeigt neue elemente im model nicht sofort an AWT, Swing, JavaFX & SWT 3
G Neues Model für JTextField erstellen AWT, Swing, JavaFX & SWT 8
A Gemeinsames Model für Baum- und Graphdarstellung-wie gehts? AWT, Swing, JavaFX & SWT 9
S Frage zu Table(Column)Model AWT, Swing, JavaFX & SWT 3
H Model umbauen ? AWT, Swing, JavaFX & SWT 5
M SWT und Model View Controller? AWT, Swing, JavaFX & SWT 8
J Table Model AWT, Swing, JavaFX & SWT 2
J Abstract Table Model AWT, Swing, JavaFX & SWT 7
D Model Listener beim JTree AWT, Swing, JavaFX & SWT 5

Ähnliche Java Themen


Oben