JList Cellrenderer fügt mehrfach ein

Status
Nicht offen für weitere Antworten.

dreadnought

Neues Mitglied
Hi

Ich habe ein Problem mit meiner JList: Seit ich einen eigene Cellrenderer habe und versuche ein JPanel mit JLabels einzufügen werden alle Listenelemente mehrfach eingefügt.
Das aussehen der einzelnen Elemente hab ich unter Kontrolle. Nur die Position...

Beim ersten Element sieht alles super aus.
aber wenn ich das 2 Element eingefügt wird dann sieht die Liste folgendermaßen aus:

2.Element 1.Element
1.Element 2.Element

beim 3. Element siehts so aus:

2.Element 3.Element 1.Element
3.Element 1.Element 2.Element
1.Element 2.Element 3.Element
usw.:lol:

dabei ist die Liste artikelEingescanntListe.setLayoutOrientation(JList.VERTICAL); ohne WRAP ausgerichtet.

die Klasse die in die Liste eingefügt wird sieht so aus:
Code:
	public class ListenPosten
	{
		private JLabel rechnungspostenArtikelOderWarenGruppeLabel;
		private JLabel rechnungspostenGebindeinhaltLabel;
		private JLabel rechnungspostenGebindeLabel;
		private JLabel rechnungspostenAnzahlLabel;
		private JLabel rechnungspostenPreisLabel;
		private JLabel rechnungspostenGesamtPreisLabel;
		private JLabel rechnungspostenRabattLabel;
		
		public ListenPosten(String rechnungspostenArtikelOderWarenGruppeString,
				String rechnungspostenGebindeinhaltString, String rechnungspostenGebindeString,
				String rechnungspostenAnzahlString,	String rechnungspostenPreisString,
				String rechnungspostenGesamtPreisString, String rechnungspostenRabattPreisString, int Stelle)
		{
			rechnungspostenArtikelOderWarenGruppeLabel = new JLabel(rechnungspostenArtikelOderWarenGruppeString);
			rechnungspostenGebindeinhaltLabel = new JLabel(rechnungspostenGebindeinhaltString);
			rechnungspostenGebindeLabel = new JLabel(rechnungspostenGebindeString);
			rechnungspostenAnzahlLabel = new JLabel(rechnungspostenAnzahlString);
			rechnungspostenPreisLabel = new JLabel(rechnungspostenPreisString);
			rechnungspostenGesamtPreisLabel = new JLabel(rechnungspostenGesamtPreisString);
			rechnungspostenRabattLabel = new JLabel(rechnungspostenRabattPreisString);
			
		}
...
und ein paar "Getter"

und der CellRenderer sieht im Moment so aus:
Code:
	public class MyCellRenderer extends JPanel implements ListCellRenderer {
		
		private static final long serialVersionUID = 8400636002225624699L;
		
		
		public MyCellRenderer()
		{
			// Konstruktor des JPanels mit FlowLayout aufrufen
			super(new FlowLayout(FlowLayout.LEFT));
			
			// JPanel undurchsichtig machen
			this.setOpaque(true);
			
			rechnungspostenpane = new JPanel();
			rechnungspostenpane.setOpaque(false);
			this.add(rechnungspostenpane);        
		}
		
		public Component getListCellRendererComponent(JList artikelEingescanntlistModel, // JList Objekt
				Object value, // anzuzeigende Komponente
				int index,    // Zellenindex
				boolean istSelektiert,  // Ist selektiert?
				boolean hatFokus)  // Hat den Fokus?
		{
			Dimension Dimie = new Dimension(80, feldhoehe);
			Dimension Dimieklein = new Dimension(70, feldhoehe);
			Dimension Dimiemittel = new Dimension(90, feldhoehe);
			Dimension Dimiegroß = new Dimension(280, feldhoehe);
			
			((ListenPosten)value).getRechnungspostenArtikelOderWarenGruppeLabel().setPreferredSize(Dimiegroß);			
			((ListenPosten)value).getRechnungspostenGebindeinhaltLabel().setPreferredSize(Dimieklein);
			((ListenPosten)value).getRechnungspostenGebindeLabel().setPreferredSize(Dimie);
			((ListenPosten)value).getRechnungspostenAnzahlLabel().setPreferredSize(Dimie);
			((ListenPosten)value).getRechnungspostenPreisLabel().setPreferredSize(Dimie);
			((ListenPosten)value).getRechnungspostenGesamtPreisLabel().setPreferredSize(Dimiemittel);
			((ListenPosten)value).getRechnungspostenRabattLabel().setPreferredSize(Dimiemittel);
			
			((ListenPosten)value).getRechnungspostenArtikelOderWarenGruppeLabel().setFont(allesandere);
			((ListenPosten)value).getRechnungspostenGebindeinhaltLabel().setFont(allesandere);
			((ListenPosten)value).getRechnungspostenGebindeLabel().setFont(allesandere);
			((ListenPosten)value).getRechnungspostenAnzahlLabel().setFont(allesandere);
			((ListenPosten)value).getRechnungspostenPreisLabel().setFont(allesandere);
			((ListenPosten)value).getRechnungspostenGesamtPreisLabel().setFont(allesandere);
			((ListenPosten)value).getRechnungspostenRabattLabel().setFont(allesandere);
//			dem Rechnungsosten nacheinander Artikelbezeichnung oder Warengruppe
			rechnungspostenpane.add(((ListenPosten)value).getRechnungspostenArtikelOderWarenGruppeLabel());
			
//			GebindeInhalt
			rechnungspostenpane.add(((ListenPosten)value).getRechnungspostenGebindeinhaltLabel());
			
//			Gebinde
			rechnungspostenpane.add(((ListenPosten)value).getRechnungspostenGebindeLabel());
			
//			Anzahl
			rechnungspostenpane.add(((ListenPosten)value).getRechnungspostenAnzahlLabel());
			
//			Preis
			rechnungspostenpane.add(((ListenPosten)value).getRechnungspostenPreisLabel());
			
//			Gesamtpreis
			rechnungspostenpane.add(((ListenPosten)value).getRechnungspostenGesamtPreisLabel());
			
//			und vielleicht später noch Rabatt hinzufügen
			rechnungspostenpane.add(((ListenPosten)value).getRechnungspostenRabattLabel());
			
//			Hintergrundfarbe des JPanels bei Fokuswechseln definieren
			if(istSelektiert) rechnungspostenpane.setBackground(Color.lightGray); // Hat den Fokus
			else setBackground(artikelEingescanntlistModel.getBackground()); // Hat den Fokus nicht
			
			return this;
		}
	}

Was mache ich falsch? :cry: ???:L
Bitte um Hilfe Ich glaub ich hab nen Brett vorm Kopf. :?:
 

André Uhres

Top Contributor
dreadnought hat gesagt.:
..Was mache ich falsch?..
Du darfst in getListCellRendererComponent keine neuen Labels hinzufügen.
Das Hinzufügen der Labels geschieht im Konstruktor:
Code:
package list;
/*
 * ListenDemo.java
 */
import java.awt.*;
import javax.swing.*;
public class ListenDemo extends JFrame {
    public ListenDemo() {
        super("ListenDemo");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setSize(600,300);
        setLocationRelativeTo(null);
        JList list = new JList();
        list.setCellRenderer(new MyCellRenderer());
        DefaultListModel model = new DefaultListModel();
        model.addElement(new ListenPosten("a1", "a1", "a1", "a1", "a1", "a1", "a1", 0));
        model.addElement(new ListenPosten("b1", "b1", "b1", "b1", "b1", "b1", "b1", 0));
        model.addElement(new ListenPosten("c1", "c1", "c1", "c1", "c1", "c1", "c1", 0));
        list.setModel(model);
        add(new JScrollPane(list));
    }
    public static void main(final String args[]) {new ListenDemo().setVisible(true);}
}
class ListenPosten {
    final private JLabel rechnungspostenArtikelOderWarenGruppeLabel;
    final private JLabel rechnungspostenGebindeinhaltLabel;
    final private JLabel rechnungspostenGebindeLabel;
    final private JLabel rechnungspostenAnzahlLabel;
    final private JLabel rechnungspostenPreisLabel;
    final private JLabel rechnungspostenGesamtPreisLabel;
    final private JLabel rechnungspostenRabattLabel;
    public ListenPosten(final String rechnungspostenArtikelOderWarenGruppeString,
            final String rechnungspostenGebindeinhaltString, 
            final String rechnungspostenGebindeString,
            final String rechnungspostenAnzahlString,   
            final String rechnungspostenPreisString,
            final String rechnungspostenGesamtPreisString, 
            final String rechnungspostenRabattPreisString, 
            final int stelle) {
        rechnungspostenArtikelOderWarenGruppeLabel = new JLabel(rechnungspostenArtikelOderWarenGruppeString);
        rechnungspostenGebindeinhaltLabel = new JLabel(rechnungspostenGebindeinhaltString);
        rechnungspostenGebindeLabel = new JLabel(rechnungspostenGebindeString);
        rechnungspostenAnzahlLabel = new JLabel(rechnungspostenAnzahlString);
        rechnungspostenPreisLabel = new JLabel(rechnungspostenPreisString);
        rechnungspostenGesamtPreisLabel = new JLabel(rechnungspostenGesamtPreisString);
        rechnungspostenRabattLabel = new JLabel(rechnungspostenRabattPreisString);
    }
    public  JLabel getArtikelOderWarenGruppeLabel() {
        return rechnungspostenArtikelOderWarenGruppeLabel;
    }
    public  JLabel getGebindeinhaltLabel() {
        return rechnungspostenGebindeinhaltLabel;
    }
    public  JLabel getGebindeLabel() {
        return rechnungspostenGebindeLabel;
    }
    public  JLabel getAnzahlLabel() {
        return rechnungspostenAnzahlLabel;
    }
    public  JLabel getPreisLabel() {
        return rechnungspostenPreisLabel;
    }
    public  JLabel getGesamtPreisLabel() {
        return rechnungspostenGesamtPreisLabel;
    }
    public  JLabel getRabattLabel() {
        return rechnungspostenRabattLabel;
    }
}
class MyCellRenderer extends JPanel implements ListCellRenderer {
    final private static long serialVersionUID = 8400636002225624699L;
    final private int feldhoehe = 8;
    final private Font allesandere = Font.decode("Arial-BOLD-11");
    final private JLabel artikel,gebindeinhalt,gebinde,anzahl,preis,gesamtPreis,rabatt;
    public MyCellRenderer() {
        // Konstruktor des JPanels mit FlowLayout aufrufen
        super(new FlowLayout(FlowLayout.LEFT));
        // JPanel undurchsichtig machen
        setOpaque(true);
        artikel = new JLabel();
        gebindeinhalt = new JLabel();
        gebinde = new JLabel();
        anzahl = new JLabel();
        preis = new JLabel();
        gesamtPreis = new JLabel();
        rabatt = new JLabel();
        Dimension dimie = new Dimension(80, feldhoehe);
        Dimension dimieklein = new Dimension(70, feldhoehe);
        Dimension dimiemittel = new Dimension(90, feldhoehe);
        Dimension dimiegroß = new Dimension(280, feldhoehe);
        artikel.setPreferredSize(dimiegroß);
        gebindeinhalt.setPreferredSize(dimieklein);
        gebinde.setPreferredSize(dimie);
        anzahl.setPreferredSize(dimie);
        preis.setPreferredSize(dimie);
        gesamtPreis.setPreferredSize(dimiemittel);
        rabatt.setPreferredSize(dimiemittel);
        artikel.setFont(allesandere);
        gebindeinhalt.setFont(allesandere);
        gebinde.setFont(allesandere);
        anzahl.setFont(allesandere);
        preis.setFont(allesandere);
        gesamtPreis.setFont(allesandere);
        rabatt.setFont(allesandere);
        add(artikel);
        add(gebindeinhalt);
        add(gebinde);
        add(anzahl);
        add(preis);
        add(gesamtPreis);
        add(rabatt);
    }
    public Component getListCellRendererComponent(final JList artikelEingescanntlistModel, // JList Objekt
            final Object value, // anzuzeigende Komponente
            final int index,    // Zellenindex
            final boolean istSelektiert,  // Ist selektiert?
            final boolean hatFokus)  // Hat den Fokus?
    {
        artikel.setText(((ListenPosten)value).getArtikelOderWarenGruppeLabel().getText());
        gebindeinhalt.setText(((ListenPosten)value).getGebindeinhaltLabel().getText());
        gebinde.setText(((ListenPosten)value).getGebindeLabel().getText());
        anzahl.setText(((ListenPosten)value).getAnzahlLabel().getText());
        preis.setText(((ListenPosten)value).getPreisLabel().getText());
        gesamtPreis.setText(((ListenPosten)value).getGesamtPreisLabel().getText());
        rabatt.setText(((ListenPosten)value).getRabattLabel().getText());
        if(istSelektiert) //         Hintergrundfarbe des JPanels bei Fokuswechseln definieren
            setBackground(Color.lightGray); // Hat den Fokus
        else setBackground(artikelEingescanntlistModel.getBackground()); // Hat den Fokus nicht
        return this;
    }
}
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
K Swing JList und veränderte CellRenderer AWT, Swing, JavaFX & SWT 8
Spin CellRenderer Probleme bei JList AWT, Swing, JavaFX & SWT 4
S Swing Jlist - CellRenderer/ Selektion AWT, Swing, JavaFX & SWT 2
D Swing JList, CellRenderer und Model AWT, Swing, JavaFX & SWT 6
J JList CellRenderer Null-Layoutpanel AWT, Swing, JavaFX & SWT 4
G JList, einzelne Strings hinzufügen AWT, Swing, JavaFX & SWT 9
B Jlist füllen AWT, Swing, JavaFX & SWT 4
H JList.setEnabled(false) - Text soll nicht grau sein AWT, Swing, JavaFX & SWT 2
BananenBrötchen Swing Arraylist in jList anzeigen AWT, Swing, JavaFX & SWT 6
J Swing JList wird nicht angezeigt AWT, Swing, JavaFX & SWT 6
A Swing JList zu JTree AWT, Swing, JavaFX & SWT 11
G Eingabe in JTextField in Array speichern und in JList ausgeben AWT, Swing, JavaFX & SWT 7
cezary Choice, JComboBox oder JList AWT, Swing, JavaFX & SWT 5
J JList scrollen AWT, Swing, JavaFX & SWT 3
Neumi5694 Swing JList - Klick abfangen AWT, Swing, JavaFX & SWT 3
G Swing Swing Binding JList funktioniert nicht AWT, Swing, JavaFX & SWT 5
M Swing JList Auswahl-GUI-Konzept AWT, Swing, JavaFX & SWT 9
C JList: Bestimmte Objekte ausschließen AWT, Swing, JavaFX & SWT 1
F JList aktualisiert nicht AWT, Swing, JavaFX & SWT 24
F JList auffüllen aus Array von Instanzen AWT, Swing, JavaFX & SWT 4
F Event wenn Maus eine JList verlässt AWT, Swing, JavaFX & SWT 13
F JList bei Windowbuilder AWT, Swing, JavaFX & SWT 8
F JList zeigt keine Einträge mehr AWT, Swing, JavaFX & SWT 1
P JList erstellen AWT, Swing, JavaFX & SWT 4
G DefaultListModel für JList AWT, Swing, JavaFX & SWT 2
P Einer JList mit eigenem ListModel einen Eintrag hinzfügen AWT, Swing, JavaFX & SWT 5
P Übergeben von ListModel an nichtparametrisierte JList AWT, Swing, JavaFX & SWT 8
M Ein Element in mehreren JList selektieren AWT, Swing, JavaFX & SWT 5
J Swing Probleme mit ListSelectionListener(), Inhalte der JList werden gelöscht? AWT, Swing, JavaFX & SWT 6
Z Swing Variable eines Objekt aus Hashmap in JList anzeigen AWT, Swing, JavaFX & SWT 1
Nabbit Über JList kein JPopupMenu AWT, Swing, JavaFX & SWT 2
O Swing JList beim Klicken in der GUI erstellen AWT, Swing, JavaFX & SWT 6
C Swing JList zeigt keine neuen Einträge an AWT, Swing, JavaFX & SWT 1
B Swing Auf JList-Elemente aus einer anderen Klasse zugreifen AWT, Swing, JavaFX & SWT 1
T Generische Klasse in JList über DefaultListModel AWT, Swing, JavaFX & SWT 1
T Swing WindowBuilder: JList wird nicht angezeigt AWT, Swing, JavaFX & SWT 2
C Button Text in JList neue Zeile AWT, Swing, JavaFX & SWT 6
C Hilfe bei JSpinner und JList AWT, Swing, JavaFX & SWT 1
D Swing ArrayList in Jlist/ List oder Array in JList/List AWT, Swing, JavaFX & SWT 5
S JList ist leer, aber DefaultListModel hat die Daten? AWT, Swing, JavaFX & SWT 9
M JList wird angezeigt, JTable (DefaultTableModel) nicht AWT, Swing, JavaFX & SWT 7
H Swing JList/JTable mit JButton, JTextField, Image, JComboBox und JLable AWT, Swing, JavaFX & SWT 2
D Swing Jlist Größe während der Laufzeit verändern. AWT, Swing, JavaFX & SWT 11
Q JList Update Problem AWT, Swing, JavaFX & SWT 1
W Sichtbarer Bereich JScrollPane vs. JList AWT, Swing, JavaFX & SWT 3
N AWT Markierte Zeile jList aus mySQL DB löschen AWT, Swing, JavaFX & SWT 2
S JList repaint AWT, Swing, JavaFX & SWT 1
F Swing JTextField in JList (Funktion beibehalten) AWT, Swing, JavaFX & SWT 2
H JList AWT, Swing, JavaFX & SWT 5
B Swing Bild von Webseite herunterladen, diese dann in JList anzeigen. AWT, Swing, JavaFX & SWT 1
B Swing Dynamische JList mit Bildern AWT, Swing, JavaFX & SWT 4
D JList&JButton erst nach Resize des JFRame sichtbar AWT, Swing, JavaFX & SWT 2
S JList Index finden AWT, Swing, JavaFX & SWT 6
3 Swing JList-Inhalt als verschlüsselte Datei schreiben und lesen AWT, Swing, JavaFX & SWT 1
N JComponenten in JList oder doch anders? AWT, Swing, JavaFX & SWT 0
S Swing JList, ArrayList + DefaultModel AWT, Swing, JavaFX & SWT 5
B Tabelleneinträge in JList anzeigen AWT, Swing, JavaFX & SWT 5
P JList/JScroolPane Text verschieben und text wrappen AWT, Swing, JavaFX & SWT 3
D Swing JList keine Selektionsänderung bei "dragged-Maus" AWT, Swing, JavaFX & SWT 4
M JList Model filtern AWT, Swing, JavaFX & SWT 4
K Swing JList - Element richtig hinzufügen AWT, Swing, JavaFX & SWT 4
T Swing Elemente der JList überlappend darstellen AWT, Swing, JavaFX & SWT 5
P Swing JList mit Objekten - Name anzeigen AWT, Swing, JavaFX & SWT 5
Ollek JList - neuer Eintrag in ArrayList dadurch keine Anzeige der Objekte AWT, Swing, JavaFX & SWT 18
K Mehrfachselektierungen in einer JList AWT, Swing, JavaFX & SWT 6
L Swing Component alignment innerhalb einer JList AWT, Swing, JavaFX & SWT 3
M Swing JList Listener AWT, Swing, JavaFX & SWT 20
M Accelerator zu JMenuItem des JPopupMenu einer JList AWT, Swing, JavaFX & SWT 2
S Swing JList wird nicht angezeigt AWT, Swing, JavaFX & SWT 3
M Element aus JList eines JFileChooser entfernen AWT, Swing, JavaFX & SWT 3
E selektierter Datensatz in JList als String Datentyp AWT, Swing, JavaFX & SWT 23
E selektiertes Element aus JList zurückgeben AWT, Swing, JavaFX & SWT 7
E JList /DefaultListModel mit Datenbank verbinden AWT, Swing, JavaFX & SWT 10
L SQL & Jtable o. JList AWT, Swing, JavaFX & SWT 5
B JList + ListCellRenderer AWT, Swing, JavaFX & SWT 5
B JList -> Disabled AWT, Swing, JavaFX & SWT 6
J JList, Anzeige aktualisieren AWT, Swing, JavaFX & SWT 7
I Jlist isselectionEmpty AWT, Swing, JavaFX & SWT 4
I Jlist dynamisch aus Datenbank füllen AWT, Swing, JavaFX & SWT 14
R Swing unbegrenzte Anzahl vonEinträgen in JList AWT, Swing, JavaFX & SWT 2
MiMa Dateien aus Ordner in einer JList Ausgeben AWT, Swing, JavaFX & SWT 32
P Elemente einer JList ausgeben AWT, Swing, JavaFX & SWT 11
M JList mit 2-zeiligen Objekten füllen AWT, Swing, JavaFX & SWT 7
S JList mit Einträgen versehen schlägt fehl AWT, Swing, JavaFX & SWT 4
F Swing ArrayList in JList anzeigen und Objekte auswählen AWT, Swing, JavaFX & SWT 2
B JList zeigt Elemente nicht an AWT, Swing, JavaFX & SWT 3
S Fragen zu JList AWT, Swing, JavaFX & SWT 3
B Aktualisierung einer JList AWT, Swing, JavaFX & SWT 5
W JList valueChanges weiterleiten? AWT, Swing, JavaFX & SWT 14
D JButton-Click in JList mit Panels (auf dem der Button ist) AWT, Swing, JavaFX & SWT 6
E Jlist nur mit Klasse? AWT, Swing, JavaFX & SWT 5
D Swing JList <-> AdapterModel <-> Model AWT, Swing, JavaFX & SWT 4
1 JList - Elemente mit rechter Maustaste wählen AWT, Swing, JavaFX & SWT 6
M JList mit DefaultListModel und listener AWT, Swing, JavaFX & SWT 4
B JList nach dem Rendern sortieren AWT, Swing, JavaFX & SWT 3
T Wie ist das "Lookup-Verhalten" von JList, JCombobox änderbar? AWT, Swing, JavaFX & SWT 4
D JList items voneinander trennen AWT, Swing, JavaFX & SWT 10
E Keine Ausgabe von JList bei drücken von Button auf die Konsole AWT, Swing, JavaFX & SWT 7
M gleiches Element in JList mehrmals hintereinander auswählen AWT, Swing, JavaFX & SWT 6
T JList und Objekte AWT, Swing, JavaFX & SWT 7

Ähnliche Java Themen


Oben