JList mit Vector füllen

Colt45

Aktives Mitglied
Moin, ich will eine JList mit Objekten aus einem Vector füllen.
Ein kurzer Überblick: Ich hab eine Klasse "Record" mit den Attributen Name und Content (beide String), diese werden auch schön in den Vector gespeichert und auch die JList wird damit befüllt, allerdings will ich, dass lediglich das
Attribut "Name" in der Jlist angezeigt wird, denn momentan steht in der JList nur der toString-Wert der einzelnen Elemente, also Record@bc12390 usw.

getter und setter für den Recordnamen sind vorhanden, momentan sieht das ganze so aus:
Java:
private static void saveRecord(){
		String recordName = newRecordView.getRecordName();
		String recordContent = newRecordView.getRecordContent();
		Record newRecord = new Record(recordName, recordContent);
		recordVector.addElement(newRecord);
		mainView.setListContent(recordVector);		
	}

Java:
void setListContent(Vector v)
	{
		recordList.setListData(v);
	}

Die Klasse Record:
Java:
public class Record 
{
	private String name;
	private String content;

	public Record(String name, String content)
	{
		this.name = name;
		this.content = content;
	}
	public String getRecordName()
	{
		return name;
	}
	public void setRecordName(String name)
	{
		this.name = name;
	}
	public String getRecordContent()
	{
		return content;
	}
	public void setRecordContent(String content)
	{
		this.content = content;
	}
}
 
Naja du könntest sicherlich einfach die toString überschreiben
Java:
	@Override
	public String toString() {
		return name;
	}

oder aber du benutzt einen eigenen Renderer:
Java:
class RecordRenderer extends JLabel implements ListCellRenderer{ //oder evtl. besser hier nicht JLabel erweitern :D
	public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
		setText(((Record)value).getRecordName());
		return this;
	}
}

und dann eben
Java:
recordList.setCellRenderer(new RecordRenderer());

Siehe auch:
How to Use Lists (The Java™ Tutorials > Creating a GUI With JFC/Swing > Using Swing Components)
How to Use Combo Boxes (The Java™ Tutorials > Creating a GUI With JFC/Swing > Using Swing Components)
 
Hab das mal naiverweise reinkopiert und es funktioniert, allerdings kann ich nun die einzelnen ListItems nichtmehr selektieren.
Irgendwie muss in den CellRenderer noch
Java:
recordList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
		recordList.setLayoutOrientation(JList.VERTICAL);
eingebaut werden, hab das an mehreren Stellen ausprobiert, ohne Erfolg
 
Hab das mal naiverweise reinkopiert und es funktioniert, allerdings kann ich nun die einzelnen ListItems nichtmehr selektieren.
Doch kannst Du schon, nur sieht man es nicht mehr.
Lass den Renderer nicht von JLabel sondern von DefaultListCellRender erben, dann kannst Du in der überschriebenen getListCellRenderer... die super-Methode aufrufen, danach einfach wieder per setText(...) den Inhalt setzen... und schon sieht man die Selektion wieder.
Alternativ kann man die Selektion im Renderer auch selbst setzen, da man über die Methode ja mitgeteilt bekommt, ob die Zelle selektiert ist:
Code:
... boolean isSelected, ...
 

Zurück
Oben