你能帮帮我,如何更改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也是相同的
-
例子在这里,在这个论坛上 这里