2012-04-20 131 views
6

¿podría ayudarme por favor, cómo cambiar el color de los artículos que se muestran en JList?Java JList configuración del color de los elementos

Estoy haciendo un JList de usuario donde puedo ver usuarios en línea y fuera de línea, y necesito que los usuarios fuera de línea tengan diferentes colores que los usuarios en línea.

Mi código para crear usuarios

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

Respuesta

4

espero que este código será totalmente ayudarle

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

}

Cuestiones relacionadas