setCellRenderer(new MyListCellRenderer())
public class MyListCellRenderer extends JCheckBox implements ListCellRenderer{
public Component getListCellRendererComponent(JList list,
Object value, int index, boolean isSelected, boolean cellHasFocus)
{
//je nach Selektion die Farbe setzen
setBackground(isSelected ? list.getSelectionBackground() : list.getBackground());
setForeground(isSelected ? list.getSelectionForeground() : list.getForeground());
try{
MyObjekt obj = (MyObjekt)value; //MyObjekt ist der Container für einen User in Deinem Fall
setText(obj.getName()); //der Text der in der Liste angezeigt werden soll
Icon i = obj.getIcon(); //das zu setzende Icon...
this.setIcon(i); //...wird hier gesetzt
}
catch(Exception ex){
ex.printStackTrace();
}
setFont(list.getFont());
setBorder(UIManager.getBorder("List.focusCellHighlightBorder"));
return this;
}
}
public class MyObject {
private Icon icon = null;
private String text = "";
public void setIcon(Icon aIcon){
icon = aIcon;
}
public Icon getIcon(){
return icon;
}
public void setText(String aText){
text = aText;
}
public String getText(){
return text;
}
public String toString(){
return text;
}
}
Weils dort eine Component erwartet?Paladin hat gesagt.:JList.add(Vektor) ist soweit ich weiss nicht möglich (jedenfalls meckert eclipse wenn ich das machen will).
Vector data = new Vector();
Vector entry = new Vector();
data.add( entry );
entry.add( icon );
entry.add( text );
Object cellValue = ((Vector)((Vector)data).get( row )).get( column );
UserData user[] = new UserData[(m_client.userDataVektor.size()/4)+3];
//(m_client.userDataVektor.size()/4)+3 gibt die Zahl der benötigten Elemente an
...
user[0].setUserName("Alle");
user[0].setUserPicture("alle.gif");
user[0].setUserJob("");
user[0].setUserAway(false);
//hier steht noch eine Schleife welche die User und ihre Daten in user[1], user[2] etc. einfügt.
m_client.ta_useronline.setListData(user); //Werte in die Liste schreiben
class MyCellRenderer extends JLabel implements ListCellRenderer {
public Component getListCellRendererComponent(
JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
UserData[] userData = (UserData[]) value;
icon = createImageIcon(String.valueOf(userData[index].getUserPicture()), "Bild");
//createImageIcon(String dateipfad, String beschreibung) lädt die Bilddatei
setIcon(icon);
setText("(" + userData[index].getUserJob() + ") " + userData[index].getUserName());
return this;
}
}
// Etwas einfacher, ist ja auch nur ne Demo
public class UserData {
private String name, job;
public UserData( String name, String job ){
this.name = name;
this.job = job;
}
public String getName(){
return name;
}
public String getJob(){
return job;
}
// Macht etwa dasselbe wie das Original
class Renderer extends JLabel implements ListCellRenderer {
public Renderer(){
}
public Component getListCellRendererComponent( JList list, Object value, int index, boolean sel, boolean foc ){
UserData u = (UserData)value;
this.setText( u.getName() + " / " + u.getJob() );
return this;
}
}
public class ListTest extends JFrame{
public ListTest() {
JList list = new JList();
UserData[] user = new UserData[3];
user[0] = new UserData("Marie", "Köchin");
user[1] = new UserData("Heinz", "Architekt");
user[2] = new UserData("Fritz", "Wirt");
list.setListData( user ); // Bis hier 1:1 Kopie von oben
list.setCellRenderer( new Renderer() ); // Cell-Renderer setzen
this.getContentPane().add( list );
setBounds( 10, 10, 200, 200 );
setDefaultCloseOperation( EXIT_ON_CLOSE );
setVisible( true );
}
}
Wird die Methode getListCellRendererComponent bei Dir überhaupt aufgerufen ??
user[0].setUserName("Alle");
user[0].setUserPicture("alle.gif");
user[0].setUserJob("");
user[0].setUserAway(false);
Das solltest einmal machen, und in UserData oder sonst wo abspeichern. Wenn Du jedesmal beim Neuzeichnen der Liste ein Bild lädst, wird dein Progi nie sehr schnell werden.