Swing MVC-Beispiel unklar(ListSelectionListener und ListDataListener)

JavaMeetsBlueJ

Bekanntes Mitglied
Hier erstmal der Code:

Klasse Planetenverwaltung(Model)
Java:
import javax.swing.*;
import javax.swing.event.*;

public class Planetenverwaltung implements ListModel
{
    // die Datenbasis
    private Planet[] planeten = new Planet[9];        
    
    // Index zum Steuern des Array
    int index = 0;
    
    // Listener - wird informiert, wenn die Datenbasis sich ändert
    ListDataListener listener; 

    public Planetenverwaltung()
    {
        planeten[0] = new Planet("Merkur");
        planeten[1] = new Planet("Venus");
        planeten[2] = new Planet("Erde");
        planeten[3] = new Planet("Mars");
        planeten[4] = new Planet("Jupiter");
        planeten[5] = new Planet("Saturn");
        planeten[6] = new Planet("Uranus");
        planeten[7] = new Planet("Neptun");
        planeten[8] = new Planet("Pluto");
    }
        
    public void loeschePluto()
    {
    	  planeten = new Planet[8];    
          planeten[0] = new Planet("Merkur");
          planeten[1] = new Planet("Venus");
          planeten[2] = new Planet("Erde");
          planeten[3] = new Planet("Mars");
          planeten[4] = new Planet("Jupiter");
          planeten[5] = new Planet("Saturn");
          planeten[6] = new Planet("Uranus");
          planeten[7] = new Planet("Neptun");
        
        this.fireContentsChanged(this, 8, 8);
    }
    
    // Methoden der Schnittstelle ListModel
    @Override
    public int getSize()
    {
        return planeten.length;
    }
    
    @Override
    public Planet getElementAt(int index)
    { 
        return planeten[index]; 
    }
    
    @Override
    public void addListDataListener(ListDataListener listener)
    {
        this.listener = listener; 
    }

    @Override
    public void removeListDataListener(ListDataListener listener)
    {
        // in der derzeitigen Implementierung nicht vorgesehen
    }    
    
    // ein Event INTERVAL_REMOVED feuern
    protected void fireIntervalRemoved(Object source, int von, int bis)
    {
        ListDataEvent event = new ListDataEvent(source, ListDataEvent.INTERVAL_REMOVED, von, bis);
        listener.intervalRemoved(event);
    }

    // ein Event INTERVAL_ADDED feuern
    protected void fireIntervalAdded(Object source, int von, int bis)
    {
        ListDataEvent event = new ListDataEvent(source, ListDataEvent.INTERVAL_ADDED, von, bis);
        listener.intervalAdded(event); 
    }
    
    // ein Event CONTENTS_CHANGED feuern
    protected void fireContentsChanged(Object source, int von, int bis)
    {
        ListDataEvent event = new ListDataEvent(source, ListDataEvent.CONTENTS_CHANGED, von, bis);
        listener.contentsChanged(event);
    }
}

Klasse Controller:
Java:
import javax.swing.event.*;
import java.awt.event.*;

public class Controller implements ListSelectionListener, ActionListener
{
    private final GUI view;
    private Planetenverwaltung model;

    public Controller(GUI view, Planetenverwaltung model)
    {
        this.view = view;
        this.model = model;
        view.mainMenu.mnPluto.addActionListener(this);
        view.lstPlaneten.addListSelectionListener(this);
        view.lstPlaneten.setModel(model);
    }    
        
    @Override
    public void actionPerformed(ActionEvent e)
    {
        model.loeschePluto();
        view.mainMenu.mnPluto.setEnabled(false);
    }
    
    @Override
    public void valueChanged(ListSelectionEvent e)
    {
        int index = e.getFirstIndex();
        Planet temp = model.getElementAt(index);
        String titel = temp.toString(); 
        view.fenster.setTitle(titel);
    }
}

Es wird ja in der Klasse Planetenverwaltung das ListModel imlpemetiert. Die überschriebene Methode
Code:
addListDataListener(ListDataListener listener)
erwartet einen ListdataListener, den dann die Klassenvariable
Code:
listener
referenzieren soll. Wo kommt der übergebene ListadataListener her?Von welchem Objekt wird der erzeugt?(irgendwo in der JList?) Da muss es doch einen Bezug zu der JList geben.Gibt es da eine Verbindung zum ListSelectionListener? Das einzige was ich finde ist die Deklaration der Variable listener als ListdataListener. Der ListSelectionListener ist mir jedoch schlüssig, da die implementierende Klasse bzw. Objekte davon einer ist.

Gruß
 
Zuletzt bearbeitet:

bERt0r

Top Contributor
Aus JList:
A ListModel can be supplied directly to a JList by way of a constructor or the setModel method. The contents need not be static - the number of items, and the values of items can change over time. A correct ListModel implementation notifies the set of javax.swing.event.ListDataListeners that have been added to it, each time a change occurs. These changes are characterized by a javax.swing.event.ListDataEvent, which identifies the range of list indices that have been modified, added, or removed. JList's ListUI is responsible for keeping the visual representation up to date with changes, by listening to the model.
Das heißt, die JList addet die ListDataListeners zum ListModel damit sie mitkriegt wenn sich das Model ändert.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
melaniemueller JavaFX Beispiel kann nicht ausgeführt werden AWT, Swing, JavaFX & SWT 4
F Swing TextField Eingabe in Variable umwandeln um zum Beispiel zu rechnen. AWT, Swing, JavaFX & SWT 3
S Beispiel für Kollisionserkennung gesucht AWT, Swing, JavaFX & SWT 24
S Bitte um ein Beispiel von JXTreeTable AWT, Swing, JavaFX & SWT 12
J AWT Einmal FileDialog-Beispiel für Dumme bitte AWT, Swing, JavaFX & SWT 6
H Tutorial bzw. Beispiel eines "GUI Ablaufs" AWT, Swing, JavaFX & SWT 8
Spin Window Event Beispiel AWT, Swing, JavaFX & SWT 6
C Mehrer Fragen zu großem kompletten Swing Beispiel AWT, Swing, JavaFX & SWT 5
A Ein Beispiel für Microba AWT, Swing, JavaFX & SWT 3
W Suche großes vollständiges Swing GUI Beispiel nach MVC Model AWT, Swing, JavaFX & SWT 5
P GridBagLayout einfaches Beispiel geht nicht? AWT, Swing, JavaFX & SWT 5
G Text rotieren: Frage zu einem Beispiel AWT, Swing, JavaFX & SWT 5
V Frage zu JScrollPane mit Custom Headern, mit Beispiel AWT, Swing, JavaFX & SWT 2
M treetable einfaches beispiel gesucht AWT, Swing, JavaFX & SWT 6
P Prefuse: Beispiel mit beschrifteten Kanten gesucht? AWT, Swing, JavaFX & SWT 9
M [SOLVED]MVC Beispiel von dbac AWT, Swing, JavaFX & SWT 2
S Fragen zu einem Beispiel(Swings und AWT) AWT, Swing, JavaFX & SWT 33
R Falsches Beispiel im Buch? AWT, Swing, JavaFX & SWT 4
J Jigloo browser tutorial - Anleitung unklar AWT, Swing, JavaFX & SWT 4
tuttle64 getSource() unklar AWT, Swing, JavaFX & SWT 4
J Swing Probleme mit ListSelectionListener(), Inhalte der JList werden gelöscht? AWT, Swing, JavaFX & SWT 6
C ListSelectionListener wird mehrfach initialisiert AWT, Swing, JavaFX & SWT 4
L ListSelectionListener durch Code auslösen AWT, Swing, JavaFX & SWT 3
D Swing Tabellen-Namen im ListSelectionListener abfragen AWT, Swing, JavaFX & SWT 2
T JList / ListSelectionListener / sehr eigenartig AWT, Swing, JavaFX & SWT 11
M JTable und ListSelectionListener Problem AWT, Swing, JavaFX & SWT 3
M ListSelectionListener wird doppelt durchlaufen AWT, Swing, JavaFX & SWT 4
R ListSelectionListener + index? AWT, Swing, JavaFX & SWT 15

Ähnliche Java Themen


Oben