MVC Pattern in Swing-Applikationen

Status
Nicht offen für weitere Antworten.

daNny

Aktives Mitglied
Hallo Ihr!

Nachdem ich mir heute in der Software Engineering Vorlesung einiges über Softwareentwürfe angehört habe, wollte ich mich nun einmal dransetzen, und versuchen mir klar zu machen, wie ich meine eigenen Projekte eleganter gestalten kann. Das ganze nun aber exemplarisch an einer Swing-Applikation, bei der die Umsetzung nach dem MVC-Muster ja etwas schwammiger ist, als es beispielsweise bei Web-Applikationen der Fall ist. Bei meinen Projekten, die ich in PHP z.B. mit dem Zend Framework entwickel, fällt mir das ganze zumindest um einiges leichter.

Ich gehe nun einmal von einer "Anwendung" aus, mit der ich Daten aus einer Excel-Datei laden kann, quasi etwas wie einen JExcelFileLoader. Die genauen Details der API wie z.B. JExcel lasse ich nun einmal aussen vor.

Als erstes müsste ich einmal klären, was meine einzelnen Teile des MVC-Musters wären, wobei es ja Usus ist, den Controller und die View in ein Delegate zu verfassen. Dieses Delegate soll nun also etwas einen JDialog sein, der eine JTable enthält, sowie unterschiedliche andere Komponenten, die der Benutzerinteraktion dienen. Das ganze könnte nun etwas z.B. so aussehen:

jexcelfileloader.jpg


Der View-Part stellt in dem Fall der Dialog mit den einzelnen Komponenten und deren Listener für die Interaktion mit dem Benutzer dar.
Den Controller-Part stellen nach meinem Erachten nun diverse Methoden der Anwendungslogik dar.

Beispiel: Der Benutzer klickt auf "Datei öffnen", wobei der Button und seine Reaktion auf den Klick noch zur View gehören. Letztendlich sorgt der Listener dafür, dass ein JFileChooser geöffnet wird, mit dem der Benutzer eine Datei auswählen kann, und nimmt diese entgegen.
Nun würde ich so weiter vorgehen, dass der Listener eine Methode aufruft, die schon zum Teil des Controller des Delegates gehört, also beispielsweise eine Methode loadFile(File file). Diese Methode übergibt die Datei beispielsweise an einen ExcelReader, der hier nicht näher erläutert ist, und erhält als kleines Dankeschön den Inhalt der Excel-Tabelle als ein zweidimensionales String[][]-Array zurück.

Doch hier kommt nun eine Stelle, bei der ich mir nicht mehr ganz so sicher bin, wo meine Daten genau hingehören.
Dieses String-Array stellt ja die Daten dar, die eigentlich zum Model meines JExcelLoader gehören. Dementsprechend könnte ich nun eine weitere Klasse ExcelLoaderModel erstellen, welcher ich nun diese Daten zur Verfügung stelle.
Andererseits sollen die Daten ja in der JTable angezeigt werden, und diese werden ja nun somit in das TableModel der Tabelle gespeichert.
Somit müsste ich meine Daten ja eigentlich an zwei Stellen übergeben: An das Model des ExcelLoaders, und an die JTable bzw. deren Model, die ja aber eigentlich zur View-Komponente gehören, d.h. ich speicher meine Model-Daten in der View.

Was wäre denn wohl der sinnvollste Weg, den ich gehen sollte? Ich weiß, dass dies nun vll. der berühmte Schuss mit Kanonen auf Spatzen ist, aber es geht mir eigentlich ums Prinzip. Zumindest ist mir die MVC-Umsetzung in Desktop/Swing-Applikationen nicht ganz klar.

Vll. kann der ein oder andere ja mal ein paar Kommentare abgeben.
 

André Uhres

Top Contributor
Das Model enthält die Daten (also auch das TableModel), die View enthält die Swing Komponenten, und der Controller die Listener. Der Controller kennt das Model und die View und sagt ihnen jeweils, was zu tun ist.
 

daNny

Aktives Mitglied
Meinst du das ganze etwa so?

Code:
/**
 * Abstracte Modelklasse eines FileLoaders
 *
 * @author Danny
 */
public abstract class FileLoaderModel {

}

Code:
/**
 * Standardmodel eines ExcelFileLoaders
 *
 * @author Danny
 */
public class DefaultExcelFileLoaderModel extends FileLoaderModel {

    /** Model der Datentablle */
    private TableModel tableModel;

    public DefaultExcelFileLoaderModel() {
        this.tableModel = new DefaultTableModel();
    }

    /**
     * Gibt das Model der Datentabelle zurück
     * @return Model der Datentabele
     */
    public TableModel getTableModel() {
        return tableModel;
    }

    /**
     * Setzt das Model der Datentabelle
     * @param tableModel Model der Datentabelle
     */
    public void setTableModel(TableModel tableModel) {
        this.tableModel = tableModel;
    }

}

Somit hätte ich zumindest meine Daten seperat im Model des FileLoaders gespeichert. Klingt eigentlich schonmal gut!
Eventuell das Model dann noch als Observable implementierten und das FileLoader als Observer registrieren.

Bin immer gerne für Kritig und Anregungen zu haben ;)

Danke schonmal für deine Antwort!
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
B Observer Pattern JLabel ändern AWT, Swing, JavaFX & SWT 7
B JavaFX Pattern (Aufteilung Zuständigkeiten AWT, Swing, JavaFX & SWT 7
M Swing MVC-Pattern - View mit mehreren Models AWT, Swing, JavaFX & SWT 5
C Swing Daten in JTable wiedergeben per TableModel und MVC Pattern AWT, Swing, JavaFX & SWT 16
Cromewell JavaFX MVC-Pattern AWT, Swing, JavaFX & SWT 7
L JavaFX Java FX Anwendung nach MVC mit Observer Pattern AWT, Swing, JavaFX & SWT 15
3 2D-Grafik BasicStroke dash pattern - Linie zu lang!? AWT, Swing, JavaFX & SWT 1
M Welches Pattern bei GUI Anwendungen? AWT, Swing, JavaFX & SWT 2
lumo SWT Image Pattern AWT, Swing, JavaFX & SWT 5
M Swing MVC Pattern verstanden, aber Probleme bei der Umsetzung AWT, Swing, JavaFX & SWT 5
C GUI Entwicklung - welches Pattern? AWT, Swing, JavaFX & SWT 16
J Swing Controller im MVC-Pattern AWT, Swing, JavaFX & SWT 9
G Hilfe! Command Pattern an easy ImageViewer? AWT, Swing, JavaFX & SWT 13
D Wie mehrere Grafiken auf JPanel anzeigen lassen? (Observer pattern?) AWT, Swing, JavaFX & SWT 24
hdi Observer-Pattern bei JPanel nicht möglich? AWT, Swing, JavaFX & SWT 7
A MVC-Pattern - Kreuzweise Anwendung? AWT, Swing, JavaFX & SWT 4
Juelin javax.swing in javafx AWT, Swing, JavaFX & SWT 1
A Eclipse 2023 und Swing AWT, Swing, JavaFX & SWT 4
W 2 JTables in einem Swing-Fenster? AWT, Swing, JavaFX & SWT 5
H Swing Componente zur Läufzeit ändern AWT, Swing, JavaFX & SWT 3
B Actionlistener mit Java Swing AWT, Swing, JavaFX & SWT 2
W Gibt es einen "automatischen Listener" in Swing oder JTable oder der ATM-Klasse? AWT, Swing, JavaFX & SWT 14
H Swing Buttons erst nach Klick sichtbar AWT, Swing, JavaFX & SWT 13
ExceptionOfExpectation Anpassung von JKomponentengrößen (Swing) AWT, Swing, JavaFX & SWT 3
thor_norsk AWT SWING Aufgabe AWT, Swing, JavaFX & SWT 7
U Zwei Fragen zu eienr Swing Aufgabe AWT, Swing, JavaFX & SWT 2
M Swing Bilder in Swing anzeigen AWT, Swing, JavaFX & SWT 9
H Swing , GridLayout, Größenbestimmung der Komponenten im Layout AWT, Swing, JavaFX & SWT 8
H Simple Animation mit Swing AWT, Swing, JavaFX & SWT 2
Guybrush Threepwood Einfachste Möglichkeit zum Abspielen eines Videos in Swing AWT, Swing, JavaFX & SWT 4
A Swing ProgressBar über 2 parallel laufende Threads AWT, Swing, JavaFX & SWT 2
M Swing GridLayout AWT, Swing, JavaFX & SWT 2
O return-Statement mit Swing AWT, Swing, JavaFX & SWT 6
O Ein Java-Programm mit Swing steuern AWT, Swing, JavaFX & SWT 1
Monokuma Swing zu JavaFX AWT, Swing, JavaFX & SWT 5
J Swing Slider AWT, Swing, JavaFX & SWT 11
G Thread starten Swing AWT, Swing, JavaFX & SWT 5
G Swing JPasswordField AWT, Swing, JavaFX & SWT 12
L Swing Button Farbe ändern/wechseln AWT, Swing, JavaFX & SWT 2
C Swing AWT GUI Anfänger Aufgabe AWT, Swing, JavaFX & SWT 7
W Inject bei einem Swing Frontend AWT, Swing, JavaFX & SWT 8
L Kommunikation zwischen Klassen / Konstruktoren bei Swing AWT, Swing, JavaFX & SWT 9
M Feldvalidierung swing AWT, Swing, JavaFX & SWT 4
E Swing Componenten werden nach Änderung des display modes verzerrt dargestellt AWT, Swing, JavaFX & SWT 8
D [Swing] Anordnung von Komponenten mit GridLayout Manager AWT, Swing, JavaFX & SWT 13
O Zukunft von Swing und JavaFX ? AWT, Swing, JavaFX & SWT 3
S Swing Fenster State Machine AWT, Swing, JavaFX & SWT 1
T Swing Swing an Bildschirm anpassen AWT, Swing, JavaFX & SWT 3
S Swing Panel wird nicht neu gezeichnet AWT, Swing, JavaFX & SWT 3
M Swing Java Swing/AWT Combobox Bug AWT, Swing, JavaFX & SWT 3
M Swing GUI mittels erben sowie variabler Dateninhalt AWT, Swing, JavaFX & SWT 1
W Swing Multitouch mit Swing AWT, Swing, JavaFX & SWT 6
S Swing-Applikation die ein Numpad nachbildet samt Keybindings..? AWT, Swing, JavaFX & SWT 5
S Swing Java Swing AWT, Swing, JavaFX & SWT 6
Blender3D Problem mit € Symbol Font Gotham Windows 10 Swing AWT, Swing, JavaFX & SWT 11
J Swing oder JavaFX AWT, Swing, JavaFX & SWT 21
D Swing Anwendung ohne JPanel erstellen AWT, Swing, JavaFX & SWT 1
D SQL Statements mit Java Swing benutzen AWT, Swing, JavaFX & SWT 4
Damtonix BufferStrategy flackert (Swing) AWT, Swing, JavaFX & SWT 9
D DatePicker für Java Swing AWT, Swing, JavaFX & SWT 2
B JavaFX oder swing AWT, Swing, JavaFX & SWT 3
T Java Swing - kleines Rechteck unter dem cursor AWT, Swing, JavaFX & SWT 5
L 2D-Grafik Swing paint|paintComponent AWT, Swing, JavaFX & SWT 2
L Swing Größe automatisch anpassen AWT, Swing, JavaFX & SWT 14
G Swing Swing Binding JList funktioniert nicht AWT, Swing, JavaFX & SWT 5
Blender3D Meine Swing Anwendung läuft unter Windows 10 und Ubuntu aber nicht auf Windows 7 AWT, Swing, JavaFX & SWT 16
B Bar Plot in Swing JPanel AWT, Swing, JavaFX & SWT 0
D Swing in Kombination mit JGraphX und JGraphT AWT, Swing, JavaFX & SWT 0
F main-Funktion bei Swing AWT, Swing, JavaFX & SWT 4
S Java Swing Print() method AWT, Swing, JavaFX & SWT 4
S Java Swing auf Windows Phone AWT, Swing, JavaFX & SWT 6
I JAVAFX - Übergabe der Inhalte an eine Scene - Wo ist der Vorteil gegenüber Swing? AWT, Swing, JavaFX & SWT 2
S Manuelles Menu in Swing AWT, Swing, JavaFX & SWT 3
T Custom Window ohne Swing / AWT / FX..?! AWT, Swing, JavaFX & SWT 1
MaxG. Swing Swing Komponenten zur Laufzeit hinzufügen AWT, Swing, JavaFX & SWT 2
Java_RY Bin Ratlos bzgl Malen in Swing AWT, Swing, JavaFX & SWT 5
offi Swing Shuttle List AWT, Swing, JavaFX & SWT 9
I Graph mit Swing zeichnen AWT, Swing, JavaFX & SWT 8
D Swing Swing Objekte sehen im Entwurf anders aus als beim Ausführen AWT, Swing, JavaFX & SWT 3
S Swing & Clean und build Problem AWT, Swing, JavaFX & SWT 12
javampir Swing repaint in JavaFX Anwendung AWT, Swing, JavaFX & SWT 3
K Mit JavaFX angefangen. Lohnt sich Swing? AWT, Swing, JavaFX & SWT 28
B Swing Update Swing Komponente bevor Methode startet. AWT, Swing, JavaFX & SWT 4
B Swing Tabelle(JTable) filtern swing GUI AWT, Swing, JavaFX & SWT 3
M Swing Swing-Widgets und paintComponent() AWT, Swing, JavaFX & SWT 2
B Swing WindowBuilde: Menu -> anderes Panel wechseln AWT, Swing, JavaFX & SWT 1
K eigener button in swing AWT, Swing, JavaFX & SWT 3
A JavaFX DatePicker in Swing beim Start nicht sichtbar AWT, Swing, JavaFX & SWT 2
windl Bufferstrategy in Swing nachstellen AWT, Swing, JavaFX & SWT 0
M Kamera in Java Swing einbinden AWT, Swing, JavaFX & SWT 4
Z Swing Swing und die Progressbar AWT, Swing, JavaFX & SWT 1
J Frage zur objektorentierten Swing Programmierung AWT, Swing, JavaFX & SWT 10
Xanny 2D-Grafik Beginner! Probleme mit Swing, Gprahics class und paint AWT, Swing, JavaFX & SWT 13
F Java Swing Rechteck in JPanel zeichnen AWT, Swing, JavaFX & SWT 7
N Swing Benötige Hilfe um ein Swing Canvas zu speichern AWT, Swing, JavaFX & SWT 4
stylegangsta JButton Fehelr javax.swing.ImageIcon.<init>(Unknown Source) AWT, Swing, JavaFX & SWT 24
RalleYTN Swing JavaFX VideoPlayer in Swing einbetten. Ich komm nicht an die Dimension des Videos! AWT, Swing, JavaFX & SWT 0
T swing läuft nur beding flüssig AWT, Swing, JavaFX & SWT 1
A Sonderzeichen bei Swing AWT, Swing, JavaFX & SWT 3
L DoubleBuffering unter Swing AWT, Swing, JavaFX & SWT 0

Ähnliche Java Themen

Neue Themen


Oben