0
我堅持實現ListCellRenderer。這是我的代碼。實現ListCellRenderer
我從數據庫中域類的形式,看起來像這樣得到的數據:
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值參數犯規看到申請狀態,以便我不知道如何標記我想改變背景的領域。
希望我提供了所有的信息,並且有人可以指引我走向正確的方向。
儘管我同意數據對象應該作爲模型值傳遞,但渲染器並不是調用'getNaziv()'的正確位置。這樣做會中斷可訪問性和數據傳輸,這依賴於模型值的toString()。最好的方法是覆蓋Domain.toString()或用適當的toString()包裝每個Domain對象。 – VGR 2014-11-20 22:55:52
@whiskeyspider謝謝。你能幫我解決這個問題嗎?不知道該怎麼做。@ VGR – caniaskyouaquestion 2014-11-21 07:16:15
是不是當JList呈現時,它會向ListModel詢問它應該顯示的元素。那麼如何用域名填寫Jlist?我可以看到我需要做什麼之後,渲染每個組件的值爲naziv。 @whiskeyspider – caniaskyouaquestion 2014-11-21 08:21:48