Java JList 设置项的颜色



你能帮帮我,如何更改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]; }
});

我希望这段代码能完全帮助你

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

}

  • 我认为您必须阅读教程如何使用列表,尤其是编写自定义单元格渲染器的部分,渲染器的概念对于JList,JTable或JComboBox也是相同的

  • 例子在这里,在这个论坛上 这里

相关内容

  • 没有找到相关文章

最新更新