Krieg keine CellRenderer Methode hin :(

Status
Nicht offen für weitere Antworten.

m!k3

Bekanntes Mitglied
Hallo,

also hab hier viele Beispiele durchgestörbert.

Ich benutze eine JList und möchte Farben setzen auf bestimme Zeilen der JList. Nun gut und schön - momentan ruf ich dann immer folgendes auf:

Code:
userlist_list.setCellRenderer(new DefaultListCellRenderer() 
{
    public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) 
    { 
        Component comp = super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus); 
        comp.setForeground(getColorFromString(theColors.get(index).toString())); 
        return comp; 
    } 
});

im Vector "theColors" stehen die Farben in der richtigen Reihenfolge.

Nun möchte ich nicht ständig den ganzen Code schreiben, sondern einfach eine Methode machen, der ich meinen Vector übergebe und der die Farben bei der JList anpasst.

Die JList ist public, drum brauch ichs nicht übergeben.

aber ich hab riesen probs mit dem "getListCellRenderer( ... )" :(
versteh sowieso nicht wie das ganze gesetzt wird.

Wenn ich mir vorm "comp.setForeground" den index ausgeben lasse, wird der immer doppelt ausgegeben, folglich werden die Farben immer doppelt gesetzt.. ändert zwar nix an der Richtigkeit, aber warum rennt der doppelt durch?!

Bei 3 List-Einträgen krieg ich folgendes zurück:

0
0
1
1
2
2

wieso? ???:L
 

m!k3

Bekanntes Mitglied
sorry.. dacht mir weils ne billige Methode bestimmt is.. geh ich ins Anfänger.. :\
 

foobar

Top Contributor
Ich würd die Daten und die entsprechenden Colorobjekte zusammen in einem Vector speichern, dadurch wird das ganze viel einfacher zu warten.
Code:
import java.awt.*;
import java.awt.Component;
import java.util.Vector;

import javax.swing.*;
public class MyFrame extends JFrame
{
	private JList list;
	public MyFrame()
	{
		this.setSize(300, 300);

		Vector data = new Vector();
		data.add(new ListElement("aaa", Color.RED));
		data.add(new ListElement("bbb", Color.GREEN));
		data.add(new ListElement("ccc", Color.BLUE));
		data.add(new ListElement("ddd", Color.YELLOW));
		this.list = new JList(new MyListModel( data ));
		this.list.setCellRenderer(new DefaultListCellRenderer()
		{
			public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus)
			{
				Component comp = super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
				comp.setForeground( ((ListElement ) ((MyListModel) list.getModel()).getListElementAt( index )).getColor()  );
				return comp;
			}
		});
		this.getContentPane().add( list );
		this.setVisible(true);
	}
	
	public static void main(String[] args)
	{
		new MyFrame();
	}
	
}

class MyListModel extends DefaultListModel
{
	private Vector data;
	public MyListModel(Vector data)
	{
		this.data = data;
	}
	
	
	public Object getElementAt(int index)
	{
		return ((ListElement)this.data.get( index )).getValue();
	}
	
	public Object getListElementAt(int index)
	{
		return this.data.get( index );
	}

	public int getSize()
	{
		return this.data.size();
	}
}

class ListElement
{
	private Color color;
	private Object value;
	
	public ListElement(Object value, Color color)
	{
		this.value = value;
		this.color = color;
	}
	
	public Color getColor()
	{
		return color;
	}

	public Object getValue()
	{
		return value;
	}

	public void setColor(Color color)
	{
		this.color = color;
	}

	public void setValue(Object object)
	{
		value = object;
	}
	
	public String toString()
	{
		return this.value.toString();
	}

}
 

m!k3

Bekanntes Mitglied
hi footbar... is ja ein fetter quellcode.. erstmal danke...

die Liste wird ja ständig aktualisiert... so können sich also Elemente ändern und die Farben ebenfalls, ich möchte das irgendwie einfacher setzen können...

versteh das immer noch nicht wie das mit dem CellRenderer läuft.. wie der das setzt.. auch mit den doppelten Werten @ ersten eintrag.. hmm...
 

m!k3

Bekanntes Mitglied
ich müsste jetzt eigentlich nur hier immer Data aktualisieren oder?! bzw. dann MyListModel aufrufen und den aktualisieren Vector übergeben

Code:
public MyListModel(Vector data) 
{ 
      this.data = data; 
}

verstehe ich das richtig? Somit setz ich am Anfang einmal den CellRenderer und das wars..
 

foobar

Top Contributor
verstehe ich das richtig? Somit setz ich am Anfang einmal den CellRenderer und das wars..
Genau.
ich müsste jetzt eigentlich nur hier immer Data aktualisieren oder?! bzw. dann MyListModel aufrufen und den aktualisieren Vector übergeben
Den Vector austauschen brauchst du normalerweise gar nicht. Wenn du Elemente hinzufügen oder löschen willst, machst du das über das MyListModel. Die entsprechenden Methoden mußt du noch implementieren.
 

m!k3

Bekanntes Mitglied
du footbar.. wie wirdn das dann aufgerufen?! Hab so ne Klassen verschachtelung noch nie gemacht :(

ähm.. könntest mir vielleicht ein beispiel in der main methode zeigen.. also ich möchte jetzt Data setzen.. bzw. alle von der Liste removen und neu setzen..

versteh ich au nicht so recht was nun diese zeile genau macht:

comp.setForeground( ((ListElement ) ((MyListModel) list.getModel()).getListElementAt( index )).getColor() );

also setForeground is klar.. aber dann der komische Aufruf.. mhh
 

foobar

Top Contributor
Hier ist das ganze mal etwas ausführlicher mit einer Methode um dem Model einen neuen Vector zu übergeben.
Code:
import java.awt.*;
import java.awt.Component;
import java.util.Vector;

import javax.swing.*;
public class MyFrame extends JFrame
{
	private JList list;
	public MyFrame()
	{
		this.setSize(300, 300);

		Vector data = new Vector();
		data.add(new ListElement("aaa", Color.RED));
		data.add(new ListElement("bbb", Color.GREEN));
		data.add(new ListElement("ccc", Color.BLUE));
		data.add(new ListElement("ddd", Color.YELLOW));
		this.list = new JList(new MyListModel( data ));
		this.list.setCellRenderer(new DefaultListCellRenderer()
		{
			public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus)
			{
				Component comp = super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
				MyListModel model = (MyListModel) list.getModel();  // Model aus Liste holen und entsprechend casten
				ListElement element = model.getListElementAt(index); // Element aus Model holen
				Color color = element.getColor(); // aktuelles Colorobjekt aus Element holen
				comp.setForeground( color ); // Colorobjekt uebergeben
				//comp.setForeground( ((ListElement ) ((MyListModel) list.getModel()).getListElementAt( index )).getColor()  );
				return comp;
			}
		});
		
		// ###################################################
		// #### add new data
		
		Vector newData = new Vector();
		newData.add(new ListElement("eee", Color.YELLOW));
		newData.add(new ListElement("fff", Color.GREEN));
		newData.add(new ListElement("ggg", Color.RED));
		newData.add(new ListElement("hhh", Color.YELLOW));

		((MyListModel)this.list.getModel()).setData( newData );
		
		// ##################################################
		
		this.getContentPane().add( list );
		this.setVisible(true);
	}
	
	public static void main(String[] args)
	{
		new MyFrame();
		
	}
	
}

class MyListModel extends DefaultListModel
{
	private Vector data;
	public MyListModel(Vector data)
	{
		this.data = data;
	}

	public void setData(Vector data)
	{
		this.data = data;
		this.fireContentsChanged(this, 0, this.data.size());
	}
	
	public Object getElementAt(int index)
	{
		return ((ListElement)this.data.get( index )).getValue();
	}
	
	public ListElement getListElementAt(int index)
	{
		return (ListElement) this.data.get( index );
	}

	public int getSize()
	{
		return this.data.size();
	}
}

class ListElement
{
	private Color color;
	private Object value;
	
	public ListElement(Object value, Color color)
	{
		this.value = value;
		this.color = color;
	}
	
	public Color getColor()
	{
		return color;
	}

	public Object getValue()
	{
		return value;
	}

	public void setColor(Color color)
	{
		this.color = color;
	}

	public void setValue(Object object)
	{
		value = object;
	}
	
	public String toString()
	{
		return this.value.toString();
	}

}
P.S. Mein Name ist foobar ;-)
 

m!k3

Bekanntes Mitglied
oh so sorry foobar :oops: *peinlich

ähm.. aber.. du änderst den inhalt nicht in der main methode.. sondern in MyFrame..

ich muss ja während einer Sitzung die Liste aktualisieren.. und folgendes geht nicht :(

Code:
new MyFrame();
data.add(new ListElement("123", Color.BLACK)); 
data.add(new ListElement("456", Color.GREEN)); 
data.add(new ListElement("789", Color.BLUE)); 
data.add(new ListElement("000", Color.YELLOW));
list = new JList( new MyListModel( data ));

hab alles public mäßig deklariert.. nur ich müsste jetzt wieder das hier aufrufen:

Code:
this.list.setCellRenderer(new DefaultListCellRenderer()

und somit spar ich mir ja wieder kein Code..
 

m!k3

Bekanntes Mitglied
also ich habs jetzt hingebracht,

aber habe folgendes Problem foobar.. wenn ich die Color setze.. hab ne Methode in MyListModel gebaut, die halt die Methode in ListElement aufruft... wird die Farbe zwar gesetzt, nur nicht aktualisiert.. also ich sehe immer noch die alte Farbe in der JList.. wenn ich aus dem Fenster rausklicke und wieder reinklicke.. also ohne direkt auf die List zu drücken sondern nur auf den Frame... wird die Farbe aktualisiert...

Warum ist das so?!
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Swing Krieg die Krise mit dem AWTEventListener AWT, Swing, JavaFX & SWT 8
S Will einen Punkt zeichnen aber krieg das net hin. AWT, Swing, JavaFX & SWT 2
G Wie krieg ich diesen Button hin? AWT, Swing, JavaFX & SWT 9
ExceptionOfExpectation JMenu, setMnemonic(Char k) bringt keine Wirkung AWT, Swing, JavaFX & SWT 8
V JavaFX Bild leer und keine Fehlermeldung AWT, Swing, JavaFX & SWT 21
S JavaFX WebView zeigt keine Animation AWT, Swing, JavaFX & SWT 5
ruutaiokwu SWT "Google Window Builder" tut keine jar's ins Projekt rein bei SWT-Projekt AWT, Swing, JavaFX & SWT 22
H String teilen, damit bei JLabel keine Punkte am Ende angezeigt werden AWT, Swing, JavaFX & SWT 4
L Java FX Keine Anzeige Im Tableview AWT, Swing, JavaFX & SWT 4
richis-fragen JTree +/- verschwidet wenn Knoten keine Kinder hat... AWT, Swing, JavaFX & SWT 6
S java.fxml.load.exception und keine automatische Aktualliseriung der Mainausgabe AWT, Swing, JavaFX & SWT 5
F JList zeigt keine Einträge mehr AWT, Swing, JavaFX & SWT 1
G Swing JButton - Keine Klickanimation AWT, Swing, JavaFX & SWT 4
G JavaFX - Während AudioRecording keine Text eingabe TextField möglich AWT, Swing, JavaFX & SWT 6
N Swing JFormattedTextField keine Werte nach Formatzuweisung AWT, Swing, JavaFX & SWT 0
C Swing JList zeigt keine neuen Einträge an AWT, Swing, JavaFX & SWT 1
X Swing Anwendung regaiert auf keine Buttons mehr wärend while(scanner.hasNextLine()) ausgeführt wird. AWT, Swing, JavaFX & SWT 4
D Swing keine JLabel-Aktualisierung bei "externem" Aufruf durch Helferklasse AWT, Swing, JavaFX & SWT 10
D Swing Warum erhalte ich keine Ausgabe? Funktioniert der equals-vergleich in actionPeformed nicht richtig? AWT, Swing, JavaFX & SWT 3
K Swing Keine Reaktion auf Tastatureingaben bei mehreren Buttons??? AWT, Swing, JavaFX & SWT 4
gamebreiti auf usereingabe warten mit GUI(nur Labels, Buttons etc. keine Texteingaben) AWT, Swing, JavaFX & SWT 3
P Swing JTable keine Markierung nach Button klick AWT, Swing, JavaFX & SWT 0
U Frame zeigt keine Komponenten AWT, Swing, JavaFX & SWT 7
H RCP(SWT) Browser-Widget zeigt keine locale HTML-Dateien an AWT, Swing, JavaFX & SWT 1
N JavaFX Keine Dynamic AWT, Swing, JavaFX & SWT 2
W Swing Ausführung einer .jar zeigt keine Reaktion AWT, Swing, JavaFX & SWT 4
D Swing JList keine Selektionsänderung bei "dragged-Maus" AWT, Swing, JavaFX & SWT 4
N Swing JTable mit Sorter: Keine Sortierung bei Klick in Header AWT, Swing, JavaFX & SWT 3
Ollek JList - neuer Eintrag in ArrayList dadurch keine Anzeige der Objekte AWT, Swing, JavaFX & SWT 18
A trotz setSize keine breite AWT, Swing, JavaFX & SWT 4
Q JTable - Keine Spaltennamen AWT, Swing, JavaFX & SWT 3
H Swing Keine Rückmeldung (freeze) bei setVisible(false) oder dispose() AWT, Swing, JavaFX & SWT 4
B JEditorPane lädt keine Schriftfarbe in HTML AWT, Swing, JavaFX & SWT 2
dzim TableView - keine Aktualisierung geänderter Items AWT, Swing, JavaFX & SWT 5
E Keine Ausgabe auf Console und List AWT, Swing, JavaFX & SWT 13
Kenan89 statischer ActionListener keine Wirkung? AWT, Swing, JavaFX & SWT 2
Kenan89 statischer ActionListener keine Wirkung? AWT, Swing, JavaFX & SWT 3
N Swing Netbeans 7.1 keine DesktopApplication mehr möglich ? AWT, Swing, JavaFX & SWT 15
H JTable zeigt keine Daten an AWT, Swing, JavaFX & SWT 5
C Swing JFrame nimmt keine anderen Elemente auf AWT, Swing, JavaFX & SWT 13
K Applet Wieso kann ich keine Array im Applet initialisieren AWT, Swing, JavaFX & SWT 13
A Swing JTable benutzt keine Checkbox für Booleans AWT, Swing, JavaFX & SWT 9
M Swing Focus für Buttons deaktiviert --> keine Reaktion mehr auf Tastendrücke AWT, Swing, JavaFX & SWT 5
E Keine Ausgabe von JList bei drücken von Button auf die Konsole AWT, Swing, JavaFX & SWT 7
C MouseMotionListener fired keine Events mehr wenn in Button AWT, Swing, JavaFX & SWT 2
D Fenster will keine Ausgabe geben>:( AWT, Swing, JavaFX & SWT 3
K Applet erkennt keine Frameverkleinerung AWT, Swing, JavaFX & SWT 5
O keine ähnliche Farben durch Random in Java AWT, Swing, JavaFX & SWT 21
N JFileChooser - Keine Funtkion AWT, Swing, JavaFX & SWT 13
P Kennt awt.list keine Tastatureingabe? AWT, Swing, JavaFX & SWT 3
Y LayoutManager Keine vollständige Darstellung der Tabelle mit GridBagLayout AWT, Swing, JavaFX & SWT 3
H Swing JScrollPane bekommt keine ScrollBars AWT, Swing, JavaFX & SWT 5
bluerob Nach RowSorter -> Keine Tabellenüberschreibung möglich AWT, Swing, JavaFX & SWT 7
V JTextField nimmt keine Eingaben an, nach nachträglichem setVisible des JWindows AWT, Swing, JavaFX & SWT 4
aze JTextField:Keine Markierung AWT, Swing, JavaFX & SWT 6
D Swing keine Tabellen Zeilen ohne Focus AWT, Swing, JavaFX & SWT 7
J Swing JTable, eigener TableCellRenderer Keine Anzeige in den Zellen AWT, Swing, JavaFX & SWT 8
C keine weiteren Events während Drag&Drop Operation möglich? AWT, Swing, JavaFX & SWT 5
Fu3L Keine Transparenten JTextComponents möglich mit Nimbus L&F? AWT, Swing, JavaFX & SWT 5
P 2D-Grafik PaintComponent() übernimmt keine Werte aus update() AWT, Swing, JavaFX & SWT 8
earlgrey_tea AWT KeyListener bekommt keine Signale AWT, Swing, JavaFX & SWT 3
B LayoutManager mischen keine gute Idee? AWT, Swing, JavaFX & SWT 9
O Swing es können keine neuen Labels hinzufügt werden während der Timer läuft AWT, Swing, JavaFX & SWT 14
B JScrollbarPane zeigt keine scrollbars AWT, Swing, JavaFX & SWT 2
I Panel scheint keine Größe zu haben AWT, Swing, JavaFX & SWT 3
aze GridLayout: Keine automatische Ausdehnung AWT, Swing, JavaFX & SWT 2
1 JFrame bleibt leer, keine Ahnung warum AWT, Swing, JavaFX & SWT 7
M SWT keine Scrollbar bei widgets.List und GridLayout AWT, Swing, JavaFX & SWT 2
P SWT Tree - Keine Selection zulassen AWT, Swing, JavaFX & SWT 4
T SWT Keine Anzeige der Widgets nach Comboauswahl AWT, Swing, JavaFX & SWT 2
1 GeneralPath-Kreise werden keine Kreise AWT, Swing, JavaFX & SWT 2
hdi Swing setPreferredSize zeigt keine Änderung AWT, Swing, JavaFX & SWT 2
R AWT [Anfänger] keine atives Aussehen von Buttons AWT, Swing, JavaFX & SWT 4
S Seltsames Problem - manchmal enthaelt die ActionMap eine JTextArea keine Actions. AWT, Swing, JavaFX & SWT 4
A SWT Table hat keine Scrollbar AWT, Swing, JavaFX & SWT 12
B Keine Änderungen an JLabel durch Array möglich AWT, Swing, JavaFX & SWT 12
C Frame repaint hat keine Wirkung AWT, Swing, JavaFX & SWT 6
L Swing JPanel sendet keine KeyEvents AWT, Swing, JavaFX & SWT 22
J Swing - ich sehe keine Linie, andere schon AWT, Swing, JavaFX & SWT 6
S JDialog gibt keine Nachrichten ueber sein Schliessen..? AWT, Swing, JavaFX & SWT 3
C JTextArea zeigt keine Scrollbalken AWT, Swing, JavaFX & SWT 18
B Heavyweight Popup lässt keine MouseEvents durch AWT, Swing, JavaFX & SWT 2
K JDialog zeigt keine Komponenten wenn es modal ist AWT, Swing, JavaFX & SWT 2
S Seltsam: SWT Table zeigt keine Scrollbar an AWT, Swing, JavaFX & SWT 12
V JTabbedPane - keine "Focus"-Box auf selektiertem T AWT, Swing, JavaFX & SWT 2
G JTable zeigt keine Spaltenheader AWT, Swing, JavaFX & SWT 7
L JDialog-kann keine Größe setzen AWT, Swing, JavaFX & SWT 4
F Thread macht keine Pause AWT, Swing, JavaFX & SWT 22
W Threads und trotzdem keine Nebenläufigkeit AWT, Swing, JavaFX & SWT 13
G Keine Anzeige des Balkens AWT, Swing, JavaFX & SWT 3
F JScrollPane mit JPanel drinne zeigt keine Scroll-Leisten AWT, Swing, JavaFX & SWT 7
K keine Zeichenfläche sichtbar AWT, Swing, JavaFX & SWT 2
J ActionListener nimmt keine for()-Schleife? AWT, Swing, JavaFX & SWT 4
M JDialog + JFrame + keine Java Tasse AWT, Swing, JavaFX & SWT 9
G keine ScaledInstance von BufferedImage? AWT, Swing, JavaFX & SWT 6
Z habe code, habe fehler, habe keine lösung AWT, Swing, JavaFX & SWT 7
C Jar Datei ist ausführbar aber zeigt keine icon's an AWT, Swing, JavaFX & SWT 18
S JList gibt nach Sortierung mit Collections keine Anzahl mehr AWT, Swing, JavaFX & SWT 3
N Trotz richtiger ListSelectionMode kann ich keine Zeile sel? AWT, Swing, JavaFX & SWT 4
technolion FileDialog/keine Multi-Selektion vs. JFileCHooser/kein LaF AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen


Oben