Swing JList wird nicht angezeigt

jav123

Mitglied
Hallo,
ich habe das Problem, dass die JList die ich in das Programm eingefügt habe nicht angezeigt wird. Ich habe es schon mit mehreren Lösungsansätzen versucht, doch ich bin so langsam am verzweifeln. Ich sitze gerade an einer Skispringer Simulation und ich möchte nachdem ich die Teilnehmer des Springes erstellet habe, diese in einer JList anzeigen lassen. Dafür habe ich einmal den Frame (erstellt mit dem WindowBuilder) der auf dem die JList angezeigt werden soll:
Java:
import java.awt.BorderLayout;
import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.DefaultListModel;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.awt.event.ActionEvent;
import javax.swing.JScrollBar;
import javax.swing.JScrollPane;

public class ListeAnzeigenGui extends JFrame {

    private JPanel contentPane;
  
    private Verwaltung v3;
    private JList<String> jlTeilnehmer;
  
    //protected DefaultListModel<Skispringer> anzeigeModel;

    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    ListeAnzeigenGui frame = new ListeAnzeigenGui();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the frame.
     */
    public ListeAnzeigenGui() {
      
        //anzeigeModel = new DefaultListModel<Skispringer>();
      
        v3 = new Verwaltung();
      
        jlTeilnehmer = null;
      
        setTitle("Lassen Sie sich ihre Liste anzeigen");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 450, 300);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        setContentPane(contentPane);
        contentPane.setLayout(null);
      
        JLabel lblU1 = new JLabel("Ihre Liste");
        lblU1.setBounds(178, 11, 83, 14);
        contentPane.add(lblU1);
      
        JButton btnOK = new JButton("OK");
        btnOK.setBounds(335, 227, 89, 23);
        btnOK.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                Durchgang1 d1 = new Durchgang1();
                d1.setVisible(true);
                dispose();
            }
        });
        contentPane.add(btnOK);
      
[B]        JScrollPane scrollPane1 = new JScrollPane();
        scrollPane1.setBounds(10, 211, 353, -164);
        contentPane.add(scrollPane1);
      
        jlTeilnehmer = new JList<String>();
        scrollPane1.setViewportView(jlTeilnehmer);
        jlTeilnehmer.setModel(v3.anzeigeModel);[/B]
    }
}
Und außerdem habe ich eine Klasse die das ganze verwaltet. In dieser Klasse ist auch die Liste enthalten, die die Teilnehmer speichert. Nicht wundern ich muss zu Ausbildung Zwecken die Klasse List benutzen um die Teilnehmer zu Speichern.
Java:
import java.util.ArrayList;

import javax.swing.DefaultButtonModel;
import javax.swing.DefaultListModel;

/**
*
* @author
* @version 1.0
*
* Diese Klasse dient zur Verwaltung der Listen und der Top 3 Skispringer.
*
*/

public class Verwaltung {
  
    // Bezugsobjekte
    public List<Skispringer> teilnehmer;
    private List<Skispringer> qualifiziert;
    private RandomTools rT1;
    public DefaultListModel<String> anzeigeModel;
  
    // Attribute
    private Skispringer[] top3;
    //private ArrayList<Skispringer> anzeige;
  
    // Konstruktor
    public Verwaltung() {
        teilnehmer = new List<Skispringer>();
        qualifiziert = new List<Skispringer>();
        top3 = new Skispringer[3];
        rT1 = new RandomTools();
        //anzeige = new ArrayList<Skispringer>();
        anzeigeModel = new DefaultListModel<String>();
    }
  
    public void teilnehmerHinzufuegen(Skispringer pSkispringer) {
        teilnehmer.append(pSkispringer);
    }
  
    public void teilnehmerEntfernen(Skispringer pSkispringer) {
        teilnehmer.toFirst();
        while(!teilnehmer.isEmpty() && teilnehmer.hasAccess()) {
            if(teilnehmer.getContent().equals(pSkispringer)) {
                teilnehmer.remove();
                break;
            }
            teilnehmer.next();
        }
    }
  
    public void teilnhemerPunkteZuweisen() {
        teilnehmer.toFirst();
        while(!teilnehmer.isEmpty() && teilnehmer.hasAccess()) {
            teilnehmer.getContent().setPunkte(rT1.ganzeZufallszahl(1, 100));
            teilnehmer.next();
        }
    }
  
    //public void teilnhemerlisteUmwandeln() {
        //teilnehmer.toFirst();
        //while(!teilnehmer.isEmpty() && teilnehmer.hasAccess()) {
            //anzeige.add(teilnehmer.getContent());
            //teilnehmer.next();
        //}
    //}
  
    public void teilnehmerListeInListModel() {
        teilnehmer.toFirst();
        while(!teilnehmer.isEmpty() && teilnehmer.hasAccess()) {
            anzeigeModel.addElement(teilnehmer.getContent().getNachname());
            teilnehmer.next();
        }
    }
  
    public void qualifiziertenHinzufuegen(Skispringer pQualifiziert) {
        qualifiziert.append(pQualifiziert);
    }
  
    public void qualifiziertenEntfernen(Skispringer pQualifiziert) {
        qualifiziert.toFirst();
        while(!qualifiziert.isEmpty() && qualifiziert.hasAccess()) {
            if(qualifiziert.getContent().equals(pQualifiziert)) {
                qualifiziert.remove();
                break;
            }
            qualifiziert.next();
        }
    }

}
Um durch die Liste durch zu scrollen habe ich die JList noch in einen ScrollPane gelegt. Anbei noch ein Bild von dem Frame, wo die Liste angezeigt werden soll. Screenshot (7).png
 
Zuletzt bearbeitet:
teilnehmer = new List<Skispringer>();
Klappt das denn? List ist doch nur ein Interface, du versuchst hier also eine neue Instanz von einem Interface zu erzeugen.

Ansonsten versuchst du 2 Listen synchron zu halten (so verstehe ich es zumindest), deine List selbst und das ListModel. Das ist ungünstig.
Wo wird diese Synchronisationsmethode teilnehmerListeInListModel überhaupt aufgerufen?
Du könntest den Skispringer direkt in dem DefaultListModel speichern, für die korrekte Anzeige muss die Skispringer Klasse nur die toString-Methode implementieren.
 
Ich nutze die generische Klasse List, also die Abiturklasse. Ich hänge mal die Dokumentation dieser Klasse als PDF an. Zuerst erstelle ich Skispringer (mit den Attribut nachname und punkte). Diese Skispringer speichere ich dann in der Liste Teilnehmer. Diese Liste möchte ich Jetzt als JList darstellen um sie zu visualisieren und auf dem Frame darstellen. Deshalb versuche ich die Teilnehmerliste in ein DefaulListModell umzuwandeln um sie anschließend auf den Frame darzustellen. (Also die Nachname der Skispringer).
 

Anhänge

Also das du nichts siehst, kann schon damit zusammen hängen:
scrollPane1.setBounds(10, 211, 353, -164);

Eine Höhe von -164 wird natürlich zur Höhe 0.

Falls Du noch mit Anzeige-Problemen zu kämpfen hast, dann würde ich das auch erst einmal separieren, also ein Model verwenden, wo dann der Fehler nicht sein kann, dass es nicht befüllt wurde oder so ... also immer nur ein Thema nach dem anderen abhaken. Also erst, wenn etwas geht, das nächste angehen.

Das kann dann z.B. etwas in der Art bedeuten:
Java:
        DefaultListModel<String> anzeigeModel = new DefaultListModel<String>();
        anzeigeModel.addElement("one");
        anzeigeModel.addElement("two");
        anzeigeModel.addElement("thre");

        jlTeilnehmer = new JList<String>(anzeigeModel);
        scrollPane1.setViewportView(jlTeilnehmer);
==> Es wird ein Model erstellt und mit drei Werten befüllt. Damit ist ausgeschlossen, dass das Model nicht befüllt wird oder so ...
Die Koordinaten scheinen halt generell nicht gut durchdacht zu sein fürchte ich, so dass Du erst einmal das Design richtig erstellen möchstest.
 
Also das du nichts siehst, kann schon damit zusammen hängen:
scrollPane1.setBounds(10, 211, 353, -164);

Eine Höhe von -164 wird natürlich zur Höhe 0.

Falls Du noch mit Anzeige-Problemen zu kämpfen hast, dann würde ich das auch erst einmal separieren, also ein Model verwenden, wo dann der Fehler nicht sein kann, dass es nicht befüllt wurde oder so ... also immer nur ein Thema nach dem anderen abhaken. Also erst, wenn etwas geht, das nächste angehen.

Das kann dann z.B. etwas in der Art bedeuten:
Java:
        DefaultListModel<String> anzeigeModel = new DefaultListModel<String>();
        anzeigeModel.addElement("one");
        anzeigeModel.addElement("two");
        anzeigeModel.addElement("thre");

        jlTeilnehmer = new JList<String>(anzeigeModel);
        scrollPane1.setViewportView(jlTeilnehmer);
==> Es wird ein Model erstellt und mit drei Werten befüllt. Damit ist ausgeschlossen, dass das Model nicht befüllt wird oder so ...
Die Koordinaten scheinen halt generell nicht gut durchdacht zu sein fürchte ich, so dass Du erst einmal das Design richtig erstellen möchstest.
Danke für den Tipp jetzt wird mir die Liste angezeigt, muss jetzt nur noch Werte hinzufügen
 

Zurück
Oben