2012-04-20 12 views
6

bạn có thể giúp tôi, cách thay đổi màu sắc của các mục được hiển thị trong JList không?Màu thiết lập Java JList của các mục

Tôi đang tạo một người dùng JList nơi tôi có thể nhìn thấy người dùng trực tuyến và ngoại tuyến, và tôi cần người dùng ngoại tuyến có màu sắc khác với người dùng trực tuyến.

Mã của tôi để tạo người dùng

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

Trả lời

4

Tôi hy vọng mã này sẽ hoàn toàn giúp bạn

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

}