2012-04-20 30 views
6

能否请你帮帮我,如何改变JList中显示的项目颜色?Java JList设置项目颜色

我在用户JList中可以看到在线和离线用户,我需要离线用户的颜色不同于在线用户。

我创建用户

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

回答

4

我希望这个代码将完全帮助你

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

}