我在资源编辑器中创建了一个带有三个标签的渲染器(Icon,Destination,lblDate)。
并在StateMachine.java中使用Listmodel事件的列表中使用它
cmp.setModel(new DefaultListModel(payments));
cmp.setRenderer(new DefaultListCellRenderer(false) {
public Component getCellRendererComponent(Component list, Object model, Object value, int index, boolean isSelected) {
if(value instanceof Payment) {
Payment r = (Payment)value;
super.getCellRendererComponent(list, model, r.getPhoneNumber(), index, isSelected);
setText( r.toString());
return this;
}
return super.getCellRendererComponent(list, model, value, index, isSelected);
}
});
在此代码中,我只能更改渲染器的目标标签
setText( r.toString());
但是如何使用其他标签例如lblDate?如何设置它们的值?
答案 0 :(得分:0)
您没有为渲染器使用GUI构建器,您可以在Codename One Blog中看到有关如何使用该构建器的详细视频。您正在使用DefaultListCellRenderer这是一个标签,因此它只能包含String和Image,您需要使用更复杂的基础并实现ListCellRenderer接口或使用Hashtable数据模型的标准GUI构建器支持。
答案 1 :(得分:-1)
我刚刚回答了Shai Almog的回答。谢谢。 答案是使用在GUI中像渲染器一样构造的Hashtable Vector。
GUI:
示例代码:
Vector PaymentsHashVec = new Vector() ;
for(int iter = 0 ; iter < getPayments().size() ; iter++) {
Hashtable hsh = new Hashtable();
Payment p = (Payment)getPayments().elementAt(iter);
hsh.put("phn", p.getPhoneNumber()) ;
hsh.put("ant",p.getOriginalAmount()+"/ " + p.getAmount()) ;
hsh.put("btm",p.getDateSubmitted()) ;
PaymentsHashVec.addElement(hsh);
}
cmp.setModel(new DefaultListModel(PaymentsHashVec));