Datenstruktur und die Kommunikation mit der GUI

Status
Nicht offen für weitere Antworten.
G

Guest

Gast
Hi,

für ein Projekt überlege ich mir im Moment eine passende Datenstruktur. Bei Änderungen an der Datenstruktur soll die GUI aktualisiert werden.

Nur wie macht man das richtig?

Beispielsweise wird meine GUI eine JList enthalten und deren Datenstruktur ist ja ein ListModel. Für meine Datenstruktur werde ich jedoch kein ListModel verwenden.
Ist der richtige Ansatz dann der, dass man bei Änderungen an der Datenstruktur einfach ein neues ListModel erzeugt und das dann der JList unterschiebt.

P.S.: Ja das MVC Konzept kenne ich, jedoch weiss ich nicht wie man es in diesem Fall umsetzen soll.
 

Marco13

Top Contributor
Naja, die ListModel<->JList-Beziehung IST ja schon ein Paradebeispiel für MVC: Die JList hängt "sich selbst" als ListDataListener ans ListModel, und wird über Änderungen im ListModel benachrichtigt. Jetzt ist es aber so, dass man nicht unbedingt mit einem ListModel rumhantieren will, sondern auch davon noch abstrahieren will. Dann betrachtet man nichtmehr JList und ListModel getrennt, sondern sieht einfach diese "Gemeinschaft" von Model und View als "eine View" an. (Und das ist sie ja auch: Dass eine JList intern ein Model verwendet, ist in gewisser Hinsicht ja "egal"). Der Ansatz könnte also ganz grob (aber streng analog zum "feingranulareren" Konzept) sowas sein wie
Code:
// Dein eigenes Datenmodell
class Data
{
    void addDataListener(DataListener dataListener) {...}

    Object getData(int index) { ... }

    void setData(int index, Object data) { ... }
}

// Der Listener fürs Modell
interface DataListener
{
    void dataChanged(DataEvent ifNecessary);
}

und die View ist dann ein DataListener, der Änderungen in eine JList überträgt....
Code:
class DataDisplay implements DataListener
{
    private Data data = ...

    public void dataChanged(DataEvent ifNecessary)
    {
        someJList.getModel().makeTheSameDataChange(ifNecessary); 
    }
}
 

Templon

Bekanntes Mitglied
Marco13 hat gesagt.:
Jetzt ist es aber so, dass man nicht unbedingt mit einem ListModel rumhantieren will, sondern auch davon noch abstrahieren will.

Ich verstehe nicht, warum man nicht immer wenn eine JList im Spiel ist mit dem ListModel "rumhantieren" soll?
 

ARadauer

Top Contributor
ich auch nicht, wenn dein model ein model für eine list ist, warum erbst du dann nicht von ListModel?

ich kenn auch viele leute die sich weigern ein sinnvolles tablemodel von abstracttablemodel oä abzuleiten. da werden zig spezialkonstrukte entwurfen nur um nicht 2 methoden der api überschreiben zu müssen...
 

Marco13

Top Contributor
Man braucht nichtmal zu überschreiben: ListModel ist ja nur ein interface. Trotzdem kann es sein, dass man das ListModel-Interface nicht direkt bei sich implementieren will. Die Gründe dafür reichen von irgendwelchen Methoden, die im vorgegebenen Datenmodell schon vorhanden sind, und für die ListModel-Implementierung anders implementiert werden müßten, über irgendwelche Constraints die von Kunden oder anderen APIs aufgezwungen werden, bis zu irgendwelchen besonderen Verhaltensweisen, die gewünscht und mit der ListModel-API nicht vereinbar sind.

Ein nicht zu vernachlässigender Grund aus meiner Sicht ist aber auch, dass man ja im Idealfall in seinem Datenmodell eben garade nicht weiss (und nicht wissen sollte) dass "eine JList im Spiel" ist. Man kann zwar fleißig das ListModel-Interface imlementieren, aber wenn man später mehrere dieser Datensätze nebeneinander in einer JTable anzeigen will, war diese Implementierung gerade mal für die Füße...

Das sind aber alles "grobgranualre" Designentscheidungen, und waren nicht Kern der Frage. Ich gehe (naiv wie ich bin :wink: ) davon aus, dass der Threadersteller sich darüber schon Gedanken gemacht und eine Entscheidung getroffen hat, die sich in dem Satz "Für meine Datenstruktur werde ich jedoch kein ListModel verwenden." [<-Punkt] widerspiegelt.
 

Wildcard

Top Contributor
Zum Beispiel kann es passieren, das Teile einer Anwendung plötzlich in einer Headless Umgebung, ganz ohne Swing laufen müssen. Das Datenmodell sollte davon also unabhängig sein und möglichst wenig von Swing wissen.
Genauso kann es passieren, das man Swing gegen zB SWT oder QT auswechselt. Dann möchte man kein Datenmodell das irgendwelche Swing Interfaces erfüllt.
 

Templon

Bekanntes Mitglied
Ja stimmt @wildcard, aber dann würde mich doch auch noch intressieren wie man so was sauber löst.
 

Wildcard

Top Contributor
Marco13 hat ja schon einen Weg gezeigt.
Ein anderer Weg wäre zB mit einem Erweiterungsobjekt zu arbeiten. Auch ein Dekorierer kann dazu verwendet werden dein eigenes Datenmodell auf eine andere Schnittstelle zu adaptieren.
 
G

Guest

Gast
Marco13 hat gesagt.:
Ein nicht zu vernachlässigender Grund aus meiner Sicht ist aber auch, dass man ja im Idealfall in seinem Datenmodell eben garade nicht weiss (und nicht wissen sollte) dass "eine JList im Spiel" ist.
Genau das war der Hintergrund für meine Frage. Ich würde gerne an meinem Datenmodell etwas ändern und alle die sich für diese Änderungen interessieren sollen benachrichtigt werden.

Marco13 hat gesagt.:
Ich gehe (naiv wie ich bin :wink: ) davon aus, dass der Threadersteller sich darüber schon Gedanken gemacht und eine Entscheidung getroffen hat, die sich in dem Satz "Für meine Datenstruktur werde ich jedoch kein ListModel verwenden." [<-Punkt] widerspiegelt.

Um das ganze mal konkreter zu machen hier ein Beispiel:

Code:
public class DataModel {
	
	private ArrayList<NameAge> names;
	
	public DataModel(){
		names = new ArrayList<NameAge>();
	}
	
	/**
	 * Add a new DataSet to the custom DataModel
	 * @param name
	 * @param age
	 */
	public void addData(String name, int age){
		NameAge na = new NameAge();
		na.name = name;
		na.age = age;
		names.add(na);
	}
	
	/**
	 * Generates a DefaultListModel of the custom DataModel
	 * @return DefaultListModel
	 */
	public DefaultListModel getNames(){
		DefaultListModel model = new DefaultListModel();
		for(int i = 0;i<names.size();i++){
			model.addElement(names.get(i).name);
		}
		return model;
	}
	
	class NameAge{
		String name;
		int age;
	}
}
Diese eigene Datenstruktur speichert den Namen und das zugehörige Alter einer Person. In einer JList soll nur das Attribut name dargestellt werden.
In diesem Beispiel müsste sich entweder die JList über die Methode getNames() das DefaultListModel holen; diese weiß jedoch nicht wann sich die Daten geändert haben.
Oder das Model "kennt" die JList und schiebt ihr bei Änderungen ein neues DefaultListModel unter. Dann wäre das Model aber von der GUI abhängig.

Vielleicht könnten wir an diesem Beispiel weiter disskutieren, wie man ein eigenes Datenmodell mit einer GUI verknüpft.
 

Marco13

Top Contributor
Vielleicht könnten wir an diesem Beispiel weiter disskutieren, wie man ein eigenes Datenmodell mit einer GUI verknüpft.

Zum Beispiel (!) so, wie oben skizziert:


Code:
class DataModelEvent 
{
    ...
}


interface DataModelListener
{
    void dataAdded(DataModelEvent event);
}


public class DataModel {
	
        private List<DataModelListener> dataModelListeners = ...
        // add/remove-Methoden für DataModelListeners

	public void addData(String name, int age)
        {
                ....
                fireDataAddedEvent(....);
	}


        private void fireDataAddedEvent(....)
        {
            DataModelEvent dataModelEvent = new DataModelEvent(....);
            for (DataModelListener dataModelListener : dataModelListeners)
            { 
                dataModelListener.dataAdded(dataModelEvent);
            }
        }
	
}

class DataModelView implements DataModelListener
{
    public void dataAdded(DataModelEvent event)
    {
        schreibDenKramInEineJListOderSonstwohin();
    }
}
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Queue-Datenstruktur: nach dem Elementen entfernen, das Ergebnis ist immer noch nicht optimal. Java Basics - Anfänger-Themen 3
FelixN Teilsummenproblem / welche Datenstruktur Java Basics - Anfänger-Themen 2
M Implementieren einer Datenstruktur, welche nur 5 Objekte speichert Java Basics - Anfänger-Themen 3
O Datenstruktur auf SET prüfen in O(n) Java Basics - Anfänger-Themen 32
O Vererbung Ueben mit kleiner Datenstruktur von Räumen Java Basics - Anfänger-Themen 10
A Datenstruktur für Savings Algorithmus und Planung von kleinen Programmierprojekten Java Basics - Anfänger-Themen 1
F Beste Datenstruktur zum Speichern? Java Basics - Anfänger-Themen 1
I Spielbrett programmieren: Datenstruktur Java Basics - Anfänger-Themen 3
R Klassen Die lineare Datenstruktur Queue Java Basics - Anfänger-Themen 3
S Welche Datenstruktur ist die optimalste um Funktionen fuer bestimmte Wertebereiche abzurufen..? Java Basics - Anfänger-Themen 5
C Methoden Datenstruktur Liste Java Basics - Anfänger-Themen 3
S Datentypen nicht lineare STATISCHE Datenstruktur? Java Basics - Anfänger-Themen 10
S Zusammenhang Datenstruktur/Algorithmus Java Basics - Anfänger-Themen 1
M Datenstruktur gesucht Java Basics - Anfänger-Themen 3
Luk10 Geeignete Datenstruktur Java Basics - Anfänger-Themen 4
J Erzeugen einer Datenstruktur Java Basics - Anfänger-Themen 12
T Datenstruktur für Sortierung Java Basics - Anfänger-Themen 4
H mehrdimensionale Datenstruktur erfassen Java Basics - Anfänger-Themen 10
StupidAttack Gson, welche Datenstruktur? Java Basics - Anfänger-Themen 4
T Java-Datenstruktur: zuweisen von Strings auf Listen von Strings Java Basics - Anfänger-Themen 10
N Vektor mit eigener Datenstruktur sortieren Java Basics - Anfänger-Themen 20
D Welche Datenstruktur für welche Problemstellung? Java Basics - Anfänger-Themen 10
A begrenzte Datenstruktur zur Speicherung von bytes Java Basics - Anfänger-Themen 6
H Adjazenzliste - Datenstruktur aber wie? Java Basics - Anfänger-Themen 7
Povlsen84 Datentypen Große, sortierte, schnelle Datenstruktur Java Basics - Anfänger-Themen 9
B Finden gemeinsamer Kanten: welche Datenstruktur ? Java Basics - Anfänger-Themen 9
B Schlange Datenstruktur Java Basics - Anfänger-Themen 16
G Datenstruktur gesucht Java Basics - Anfänger-Themen 14
A Schnelle, dynamische, geordnete Datenstruktur? Java Basics - Anfänger-Themen 11
E Gibt es eine ähnliche Datenstruktur wie eine Hashmap Java Basics - Anfänger-Themen 3
K eigene Hash-Datenstruktur Java Basics - Anfänger-Themen 2
D Was fürne Datenstruktur für Kreuztabelle mit doubles? Java Basics - Anfänger-Themen 1
K Datentyp vs. Datenstruktur - Unterschiede Java Basics - Anfänger-Themen 13
D Was machen wenn Datenstruktur sich ständig ändert? Java Basics - Anfänger-Themen 10
0 Dynamische Datenstruktur ohne Duplikate und mit direkter Elementauswahl Java Basics - Anfänger-Themen 3
G Welche Datenstruktur ( Sets / Maps)? Java Basics - Anfänger-Themen 10
I Datenstruktur eines Terminkalenders Java Basics - Anfänger-Themen 11
K suche nicht dynamisch Datenstruktur Java Basics - Anfänger-Themen 6
M Suche passende Datenstruktur Java Basics - Anfänger-Themen 3
P geeignete Datenstruktur für dreidimensionale Raumbelegung Java Basics - Anfänger-Themen 5
G Suche geeignete Datenstruktur Java Basics - Anfänger-Themen 8
G Baum Datenstruktur Java Basics - Anfänger-Themen 2
U Welche Datenstruktur soll ich nehmen? Java Basics - Anfänger-Themen 11
G Welche Datenstruktur ist hier die sinnvolste Java Basics - Anfänger-Themen 6
X txt datei in eine datenstruktur einlesen Java Basics - Anfänger-Themen 3
J Datenstruktur Java Basics - Anfänger-Themen 6
G Datenstruktur [int id, int wert] nach wert sortieren? Java Basics - Anfänger-Themen 5
S Welche Datenstruktur für Tabelle/DB? Java Basics - Anfänger-Themen 5
1 Wahl der Datenstruktur für die Suche. Java Basics - Anfänger-Themen 9
G Geeignete Datenstruktur ? Java Basics - Anfänger-Themen 8
N passende Datenstruktur Java Basics - Anfänger-Themen 3
E welche Datenstruktur (Collection) Java Basics - Anfänger-Themen 4
6 Welche Datenstruktur? Java Basics - Anfänger-Themen 3
P Datenstruktur Java Basics - Anfänger-Themen 4
J Kann man Daten innerhalb einer Datenstruktur verändern? Java Basics - Anfänger-Themen 4
K datenstruktur Java Basics - Anfänger-Themen 5
G Datenstruktur abbilden Java Basics - Anfänger-Themen 3
F Welche Datenstruktur für Matrix mit Vektoren? Java Basics - Anfänger-Themen 2
F Gibt es eine Datenstruktur für Koordinaten x, y? Java Basics - Anfänger-Themen 8
E Welche Datenstruktur für Spielbäume? Java Basics - Anfänger-Themen 13
P Datenstruktur gesucht: Array mit Dictionary Java Basics - Anfänger-Themen 2
H Datenstruktur für folgende Daten Java Basics - Anfänger-Themen 8
G Komplexe Datenstruktur (Liste heterogener Datensätze) ? Java Basics - Anfänger-Themen 2
P Welche Datenstruktur um schnell zu suchen? Java Basics - Anfänger-Themen 25
S Datenstruktur für Fahrplan einer Buslinie Java Basics - Anfänger-Themen 7
S Heterogene Datenstruktur Problem mit Set Java Basics - Anfänger-Themen 12
G Datenbank VS simpler Datenstruktur Java Basics - Anfänger-Themen 3
K Welche Datenstruktur für eine Bibliotheksanwendung? Java Basics - Anfänger-Themen 5
G datenstruktur für jTable? Java Basics - Anfänger-Themen 4
B Kommunikation mit Seriellen Schnittstellen + Integration einer lib Java Basics - Anfänger-Themen 1
C Kommunikation zwischen 2 Klassen Java Basics - Anfänger-Themen 9
D Klassen Klassen Kommunikation Java Basics - Anfänger-Themen 12
I Kommunikation "normaler PC" mit lokaler Software an "Cloud Service" und umgekehrt Java Basics - Anfänger-Themen 15
izoards Socket Kommunikation Java Basics - Anfänger-Themen 16
C Kommunikation zwischen 2 Klassen Java Basics - Anfänger-Themen 3
M konzeptuelle Frage: In welcher Klasse definiert man am Besten Methoden, die die Kommunikation mit dem User regeln? Java Basics - Anfänger-Themen 8
A Client-Server Kommunikation Java Basics - Anfänger-Themen 3
S JavaFX-Arduino Kommunikation mit LCD-Anzeige Java Basics - Anfänger-Themen 0
A Kommunikation zwischen nebenläufigen Threads Java Basics - Anfänger-Themen 4
F Klassen Kommunikation zwischen Klassen Java Basics - Anfänger-Themen 4
M Input/Output Kommunikation mit externen Geräten Java Basics - Anfänger-Themen 0
M OOP Kommunikation MVC und DTO Java Basics - Anfänger-Themen 13
K Kommunikation von Java RMI und Webservices Java Basics - Anfänger-Themen 9
H Einfache Client/Server-Kommunikation Java Basics - Anfänger-Themen 16
E MVC: Kommunikation der Modellteile Java Basics - Anfänger-Themen 12
G Klassen Kommunikation zw. Klassen Java Basics - Anfänger-Themen 28
B Socket Kommunikation in beide Richtungen Java Basics - Anfänger-Themen 12
F Socket Kommunikation Java Basics - Anfänger-Themen 4
G Server-Client Kommunikation Java Basics - Anfänger-Themen 3
G Kommunikation zwischen zwei Klassen Java Basics - Anfänger-Themen 5
J Panel-übergreifende Kommunikation Java Basics - Anfänger-Themen 3
P Kommunikation zwischen zwei *.class Java Basics - Anfänger-Themen 3
J RxTx/RS232 Kommunikation (TwoWay) Java Basics - Anfänger-Themen 10
Z Tomcat Server Kommunikation zu Client Applet Java Basics - Anfänger-Themen 5
W Inter-Thread-Kommunikation Java Basics - Anfänger-Themen 3
M Kommunikation zwischen Klassen Java Basics - Anfänger-Themen 3
T Kommunikation zwischen Controller und GUI Java Basics - Anfänger-Themen 2
S Frage zur Kommunikation zwischen Objekten Java Basics - Anfänger-Themen 5
J Kommunikation zwischen zwei JAVA-Dateien Java Basics - Anfänger-Themen 8
T Kommunikation zw. 2 Javaprogrammen Aufr --> Verab. -> Java Basics - Anfänger-Themen 6

Ähnliche Java Themen

Neue Themen


Oben