Java Swing: zweite JList zeigt nichts an

raffiSSL

Lt. Junior Grade
Dabei seit
Feb. 2006
Beiträge
284
Hallo,
wie oben zu sehen bin ich gerade dabei ein Programm mit Hilfe von java Swing zu erstellen. Bevor ich zum problem komme vllt. erst einmal der Sachverhalt: Das Programm ist zum erstellen, löschen und ändern von Professuren und Lehrveranstaltungen zuständig. Für das ändern und hinzufügen habe ich jeweils einen Dialog erstellt. Jede Professur kann Lehrveranstaltungen haben, aber eine Lehrveranstaltung muss zu einer Professur gehören. Um das ganze anzuzeigen habe ich 2 JListen gewählt. Die erste zeigt die Professuren an und soll bei auswahl eines Datensatzes in der zweiten JList die zugehörigen Veranstaltungen anzeigen.
Da das laden und speichern wunderbar klappt werden die Daten ordnungsgemäß eingelesen bzw. gespeichert. Nur die JList mit den Veranstaltungen bleibt leer.
In meiner Main-Klasse habe ich folgendes gemacht:
Code:
JList veranstList;
...
public Main () {
...
        veranstList = new JList();
        veranstList.setPreferredSize(new Dimension(200, 250));
...
    }
...
class ProfSelectionListener implements ListSelectionListener {
 
        @Override
        public void valueChanged(ListSelectionEvent arg0) {
            int index = profList.getSelectedIndex();
            veranstList = new JList(prof.pf.get(index).vModel);
        }
    }
Ich habe wie zu sehen das Model der Veranstaltungsliste in die Professurklasse eingefügt. Auch die Professurklasse besitzt also ein Model. Die Modelle sind gleich aufgebaut (Beispiel: ProfessurModel):
Code:
public class ProfModel extends AbstractListModel {

	ArrayList<Professur> pf;
	
	public ProfModel () {
		pf = new ArrayList<Professur>();
	}
	
	@Override
	public Professur getElementAt (int index) {
		return pf.get(index);
	}
	
	public Veranstaltung getVeranstAt (int index) {
		return pf.get(index).getVeranstatung(index);
	}
	
	public int getVeranstSize (int index) {
		return pf.get(index).getVeranstSize();
	}
	
	public void addElement (Professur prof) {
		pf.add(prof);
		fireIntervalAdded(pf, pf.size() - 1, pf.size() - 1);
	}
	
	public void addVeranst (Veranstaltung v, int index) {
		pf.get(index).setVeranstaltung(v);
	}
	
	public void deleteElement (int index) {
		pf.remove(index);
		fireIntervalRemoved(pf, index - 1, index - 1);
	}

	@Override
	public int getSize () {
		return pf.size();
	}
	
	public String speicherDarstellung (int index) {
		return "+^"+pf.get(index).getKuerzel()+"^"+pf.get(index).getName()+"^"+pf.get(index).getProfessor()+"^"+
		"^"+pf.get(index).getMail()+"^"+pf.get(index).getmAnz();
	}
}
Das heist jedes Element der ArrayList besitzt ein eigenes Veranstaltungsmodel. Ist das überhaupt so richtig umgesetzt von mir?
Wie gesagt, wenn ich Daten lade und diese bearbeite und wieder speichere sind die Änderungen in der Textdatei zu sehen, also sollte es nur an der Veranstaltungsliste liegen.
Puh...ich hoffe das reicht ersteinmal an Infos.

Danke
MfG
 

Tux1000

Cadet 4th Year
Dabei seit
Dez. 2005
Beiträge
83
Hallo,

ich hab es nur einmal überflogen, aber der Fehler sollte die Zeile
veranstList = new JList(prof.pf.get(index).vModel);
sein.
Dort erzeugst du eine neue JList - das ist falsch. Du solltest nur das Model austauschen (oder manipulieren) und nicht eine komplett neue JList instanzieren, denn damit schwirrt diese jetzt im Arbeitsspeicher herum, wird aber nirgends angezeigt, da diese neu erzeugte Instanz noch zu keiner Swing Komponente hinzugefügt wurde.

Gruß
 

raffiSSL

Lt. Junior Grade
Ersteller dieses Themas
Dabei seit
Feb. 2006
Beiträge
284
AAAhhhh ja klar. Es muss natürlich "veranstList.setModel(prof.pf.get(index).vModel);" heißen. Jetzt funnktioniert es.

Danke :)
 
Top