Java JList setting color of items

Jano Nepovinne Bušfy picture Jano Nepovinne Bušfy · Apr 20, 2012 · Viewed 16k times · Source

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]; }
});

Answer

Jar Yit picture Jar Yit · Oct 11, 2015

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;
      }
 }

}