Swing MVC-Pattern - View mit mehreren Models

MayR42

Mitglied
Hallo zusammen!

Ich arbeite gerade an einer GUI, die in Swing entwickelt werden muss. Ich will das ganze nach dem bekannten MVC-Pattern realisieren (View implementiert Observer, Controller implementiert ActionListener, Model extende Observable).

Die eine View ist relativ vollgepackt (Expertenansicht) und enthält viele Elemente (Listen, viele Checkboxen usw.). Den Zustand dieser Elemente will ich auf mehrere Models aufteilen, da einige Daten nicht so recht zusammen gehören und die eine View in Zukunft vielleicht nochmal aufgeteilt werden soll (Anfängeransichten mit Dialog).

Meine Idee:
In der View würde ich folgenden Code implementieren, der unterscheidet welches Model aktualisiert wurde und welche View-Elemente neugezeichnet werden müssen:

Java:
 @Override
    public void update(Observable o, Object arg) {
        if(o.getClass().getName().equalsIgnoreCase("erstesMdl"))
        this.zeichneListe();
        else if (o.getClass().getName().equalsIgnoreCase("zweitesMdl"))
        this.zeichneTabelle();

    }

Was haltet ihr davon? Ist das kompletter Käse und gibt es etwas "eleganteres"?
 
instanceOf wäre die bessere Variante 😉

Im Idelafall würde ich es aber wenn möglich mit einer Model-Instanz pro update() lösen, und bei dir zB die View auch splitten. Alternativ Java 8 + Lambdas und kein implementieren von Observer 😉
 
Das mit instanceOf ist besser, danke.

Ich hab meinen Code dazu gleichmal angepasst. Habe die Methodenaufrufe auch gleich überarbeitet.
Java:
 @Override
    public void update(Observable o, Object arg) {
        if(o instanceof ErstesMdl"))
             zeichneListe(((ErstesMdl) o).getListe());

        else if (o instanceof ZweitesMdl)
             zeichneTabelle(((ZweitesMdl) o).getTabelle());
        else
             //mache nix
    }

Deinen zweiten Abschnitt verstehe ich nicht.
 
Die View kann das Model sowieso kennen - deshalb würde ich die Parameter, die Update hat, nicht nutzen, sondern nur mit entsprechenden Instanzattributen arbeiten.

Und die View in mehrere aufteilen, die jeweils einen einzelnen Aspekt zeigen, und dafür auch nur ein Model benötigen
 
Nein - ein Frame reicht.

Du kannst aber den Inhalt des Frames sinnvoll gruppieren und nicht direkt zusammengehörendes auf mehrere Klassen aufteilen, wie du es auch beim Model gemacht hast.
 

Neue Themen


Zurück
Oben