我被困在实现ListCellRenderer上了。这是我的密码。
我从DB获得的数据以如下所示的域类的形式显示:
public class Domain {
private Integer id;
private String naziv;
private Integer status;
public Domain(){}
public Integer getId() {return id;}
public void setId(int i){id = i;}
public String getNaziv(){return naziv;}
public void setNaziv(String n){naziv = n;}
public Integer getStatus(){return status;}
public void setStatus(int s){status = s;}
}设置JList:
DefaultListSelectionModel m = new DefaultListSelectionModel();
m.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
m.setLeadAnchorNotificationEnabled(false);
DefaultListModel<String> modelRN = new DefaultListModel<String>();
JScrollPane scrollPane = new JScrollPane();
scrollPane.setBounds(10, 86, 390, 199);
contentPane.add(scrollPane);
JList<String> listRN = new JList<String>(modelRN);
scrollPane.setViewportView(listRN);
listRN.setBorder(new TitledBorder(null, "", TitledBorder.LEADING, TitledBorder.TOP, null, null));
listRN.setSelectionModel(m);这就是我如何填充列表的方式:
dRN = new DBdomain(s,a,b).Conn();
for(int i=0;i<dRN.size();i++){
modelRN.addElement(dRN.get(i).getNaziv()); 其中dRN = ArrayList<Domain>
所以问题是这个。我正在用字符串填充列表,这些字符串是Domain.getNaziv(),但我希望更改Domain.getStatus()具有特定值的列表中的背景。我知道我需要实现这样的东西:
public class MyListCellRenderer extends DefaultListCellRenderer {
@Override
public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
Component c = super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
// do something
return c;
}
}问题是,我不是用域填充Jlist,而是使用域字段(它是一个字符串),因此getListCellRendererComponent中的value参数看不到已归档状态,因此我不知道如何标记要更改其背景的字段。
希望我提供了所有的信息,有人可以指出我的正确方向。
发布于 2014-11-20 21:16:14
问题是我没有用域填充Jlist
很好地使用域填充JList。也许是这样的:
public class MyListCellRenderer extends DefaultListCellRenderer {
@Override
public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
Component cell = null;
if (value instanceof Domain) {
Domain domain = (Domain)value;
int status = domain.getStatus();
String naziv = domain.getNaziv();
cell = super.getListCellRendererComponent(list,
naziv, // note this...
index,
isSelected,
cellHasFocus);
if (status > 0) { // or whatever...
cell.setBackground(STATUS_ON_COLOR);
} else {
cell.setBackground(STATUS_OFF_COLOR);
}
}
}
return cell;
}https://stackoverflow.com/questions/27049473
复制相似问题