jList + mitteilen das Daten sich geändert haben?

  • Themenstarter Themenstarter OceanDriver
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
O

OceanDriver

Gast
Hallo,


Ich habe eine jList mit einem eigenen Model:

Code:
Leactures_jList_topicsAndTests.setModel(new javax.swing.AbstractListModel() {

    public int getSize()
    {
        return AdministrationClass.getInstance().getLeacture(Leactures_JTextField_Name.getName()).getTestsAndTopics().size();
    }

    public Object getElementAt(int i)
    {
        return AdministrationClass.getInstance().getLeacture(Leactures_JTextField_Name.getName()).getTestsAndTopics().get(i);
    }

});



Doch wie kann ich der jList mitteilen, dass sich etwas an den Daten geändert hat und er sie neu einlesen soll?
 
Wenn ich einen Eintrag in der ArrayList hinzufüge. Nur, wie soll ich der JList erzählen, dass neue Daten vorhanden sind?
 
AbstractListModel model = (AbstractListModel) jList.getModel();
model.fireContentsChanged(null,0,laenge-1);

oder eine der anderen fire-Operation, wie man es von Models so kennt,
schön ist das aber nicht, baue lieber was anderes
 
Was anderes?

Ich hab mir schon überlegt die add-methode im Model selbst einzubauen. Doch was wäre denn sauber um das zu lösen?
 
ein normale Model mit eigener Liste von Daten,
Hinzufügen per normaler add-Operation,
ein einfaches DefaultTableModel wäre schon ok,

das galant definierte Model mit den gleichen Daten wie irgendeine Liste hat ja was,
wenn nicht dieser schreckliche ewig lange Aufruf
> AdministrationClass.getInstance().getLeacture(Leactures_JTextField_Name.getName()).getTestsAndTopics().
wäre,
für sich verändernde Daten ist so ein Kniff aber bestimmt nicht geeignet
 
Aber wäre das extra Model nicht einwenig unflexibel? Ich mein, ich muss in anderen STellen des Programmes auch auf diese Daten zugreifen.

Ich habe gerade mal versucht mir das zum AbstractListModel gecastete Model zu verwenden um ein fireContentsChanged auszuführen, allerdings kann ich da irgnedwie nicht draufzugreifen?

Ich hab die methode mal überschrieben, damit ich nicht extra immer die Parameter übergeben muss:

Code:
    public void fireIntervalAdded()
    {
        super.fireIntervalAdded(null, 0, getSize()-1);
    }

model.fireContentsChanged();

will aber nicht funktionieren
 
stimmt, die Operation ist protected, und durch die anonyme Klassendefinition kannst du auch keine Operation hinzufügen,

eine SubKlasse muss also her,
oder noch ein anderes System:
die anonyme Klasse wird als Listener auf die Hauptdatenquelle registriert und bekommt so Events bei Änderungen,
welche sie selber in eigene ContentChanged-Events umwandelt

damit wäre auch das 'einwenig unflexibele' aus der Welt geschafft,
damit müsste das Model keine eigenen Daten vorhalten,

irgenwie muss es auf jeden Fall von Änderungen etwas mitbekommen, soviel steht fest
 
AdministrationClass.getInstance().getLeacture(Leactures_JTextField_Name.getName()).getTestsAndTopics().size();

Tippfehler
Großgeschriebene fields
Datenhaltung in einem Singleton
Zugriff auf Daten über den Inhalt einer GUI-Komponente
Kein Abfangen fehlerhafter Eingaben im TextField
Zurückgeben einer (Array?)List
Und an DIESER List, die da zurückgegeben wird, sollen Änderungen registriert werden?!

Im gleichen Stil fortgesetzt:
Überall da, wo du die Liste änderst, musst du
MyGUI.getInstance().Leactures_jList_topicsAndTests.setModel(new javax.swing.AbstractListModel() { ... });
aufrufen. (Ja, das wäre trashig, aber stört dich das wirklich?)
 
Zugriff auf Daten über den Inhalt einer GUI-Komponente --> Soll ja nicht sein, die AdministrationClass ist ja der Singleton, der absolut garnichts mit der GUI zu tuen hat. Warum muss ich das model denn immer wieder neu setzen?Es wird doch insofern nur mit dem Model gearbeitet, dass man ihm mitteilen muss das die Daten sich geändert haben (was ja das jeweilige Event tut)
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben