Hier erstmal der Code:
Klasse Planetenverwaltung(Model)
Klasse Controller:
Es wird ja in der Klasse Planetenverwaltung das ListModel imlpemetiert. Die überschriebene Methode
erwartet einen ListdataListener, den dann die Klassenvariable
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ß
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)
Code:
listener
Gruß
Zuletzt bearbeitet: