could you please help me, how to change color of items showed in JList?
I'm making an user JList where I can see online and offline users, and I need the offline users to have different colors than online users.
My code for creating users
final String [] strings=database.getUsers(myLogin);
jList1.setModel(new javax.swing.AbstractListModel() {
@Override
public int getSize() { return strings.length; }
@Override
public Object getElementAt(int i) { return strings[i]; }
});
I hope this code will totally help you
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.EventQueue;
import java.util.Vector;
import javax.swing.DefaultListCellRenderer;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JScrollPane;
public class UserList {
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
JFrame f = new JFrame("Users");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setSize(300, 300);
JList list = new JList(new Vector<User>() {
{
add(new User("A", false));
add(new User("B", true));
add(new User("C", true));
add(new User("D", false));
}
});
list.setCellRenderer(new DefaultListCellRenderer() {
@Override
public Component getListCellRendererComponent(JList list, Object value, int index,
boolean isSelected, boolean cellHasFocus) {
Component c = super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
if (value instanceof User) {
User nextUser = (User) value;
setText(nextUser.name);
if (nextUser.loggedIn) {
setBackground(Color.GREEN);
} else {
setBackground(Color.RED);
}
if (isSelected) {
setBackground(getBackground().darker());
}
} else {
setText("whodat?");
}
return c;
}
});
f.add(new JScrollPane(list), BorderLayout.CENTER);
f.setVisible(true);
}
});
}
static class User {
String name = "NN";
boolean loggedIn = false;
public User(String name, boolean loggedIn) {
this.name = name;
this.loggedIn = loggedIn;
}
}
}