Я работаю с LWUIT List. Вот как создается Список:
db = new ClientDB();
listclient = db.listClient();
tModel = new ListSource(listclient);
renderer = new CListCell(true, new String[]{"", "", "Encours : ", "Impayés : "});
tList = new CList(tModel, renderer);
public Vector listClient()
{
try
{
filter = new Filter("");
comparator = new Comparator();
enumRec = this.enumerateRecords(filter, comparator);
while(enumRec.hasNextElement())
{
id = enumRec.nextRecordId();
recIDs.addElement(new Integer(id));
bData = this.getRecord(id);
client = new Client(bData);
if (!innerResultat.isEmpty())
{
innerResultat.removeAllElements();
}
innerResultat.addElement(new String(client.getIdclient()));
innerResultat.addElement(new String(client.getCin()));
innerResultat.addElement(new String(client.getNoms()));
innerResultat.addElement(new String(client.getEncours()));
innerResultat.addElement(new String(client.getImpayes()));
resultat.addElement(innerResultat);
}
}
catch (Exception ex) {
ex.printStackTrace();
}
return resultat;
}
public class ListSource extends DefaultListModel {
public ListSource(Vector valeur)
{
super(valeur);
}
public int getListIDs(int ligneSelected)
{
return ligneSelected;
}
}
public class CListCell extends Container implements ListCellRenderer {
private boolean isPhotoDisplayed;
private BorderLayout photoLayout = new BorderLayout();
private BoxLayout yLayout = new BoxLayout(BoxLayout.Y_AXIS);
private Vector vLabels = new Vector();
private Label pic = new Label("");
private Container cnt;
private Font fontLibelle = (MenuPrincipalForm.r).getFont("FontTextFieldBold");
private Label focus = new Label("");
public CListCell(boolean displayPhoto, String[] libelles)
{
isPhotoDisplayed = displayPhoto;
this.getSelectedStyle().setPadding(0, 0, 0, 0);
this.getUnselectedStyle().setPadding(0, 0, 0, 0);
if (displayPhoto)
{
setLayout(photoLayout);
addComponent(BorderLayout.WEST, pic);
}
else
{
setLayout(yLayout);
}
cnt = new Container(yLayout);
for (int i=0;i<libelles.length;i++)
{
vLabels.addElement(new Label(libelles[i]));
((Label)vLabels.elementAt(i)).getStyle().setBgTransparency(0);
((Label)vLabels.elementAt(i)).getStyle().setFont(fontLibelle);
cnt.addComponent(((Label)vLabels.elementAt(i)));
}
addComponent(BorderLayout.CENTER, cnt);
focus.getStyle().setBgTransparency(100);
}
public Component getListCellRendererComponent(List list, Object value, int index, boolean isSelected)
{
Vector reelData = new Vector();
if (value != null && (value instanceof Vector))
{
if (((Vector)value).isEmpty())
{
if (isPhotoDisplayed)
pic.setIcon(null);
for (int i=0; i<vLabels.size(); i++)
((Label)vLabels.elementAt(i)).setText(((Label)vLabels.elementAt(i)).getText().concat("-"));
}
else
{
reelData = (Vector)((Vector)value).elementAt(index);
for (int i=0; i<vLabels.size(); i++)
((Label)vLabels.elementAt(i)).setText(((Label)vLabels.elementAt(i)).getText().concat(String.valueOf(reelData.elementAt(i+1))));
pic.setIcon(null);
}
}
return this;
}
public Component getListFocusComponent(List list)
{
return focus;
}
}
public class CList extends List {
public CList(ListSource model, CListCell renderer)
{
setModel(model);
setListCellRenderer(renderer);
setItemGap(0);
setFixedSelection(List.FIXED_NONE_CYCLIC);
}
}
И в методе getListCellRendererComponent
параметра ListCellRenderer
параметр value
вызывает у меня проблему. Его тип Object
в Javadoc, и реальный тип данных в моем приложении - Vector
, это вектор вектора (вектор, элементами которого является вектор).
Моя проблема в том, что я получаю ошибку ClassCastException
во время выполнения, и ошибка стека показывает, что метод getListCellRendererComponent
вызвал ошибку.
Так как работать с Объектом и Вектором?
Ошибка стека:
java.lang.ClassCastException: 0
- view.CListCell.getListCellRendererComponent(), bci=112
- com.sun.lwuit.plaf.DefaultLookAndFeel.getListPreferredSize(), bci=218
- com.sun.lwuit.List.calcPreferredSize(), bci=7
- com.sun.lwuit.Component.preferredSize(), bci=28
- com.sun.lwuit.Component.getPreferredSize(), bci=1
- com.sun.lwuit.Component.getPreferredH(), bci=1
- com.sun.lwuit.layouts.FlowLayout.getPreferredSize(), bci=70
- com.sun.lwuit.Container.calcPreferredSize(), bci=5
- com.sun.lwuit.Component.preferredSize(), bci=28
- com.sun.lwuit.Component.getPreferredSize(), bci=1
- com.sun.lwuit.Component.getPreferredH(), bci=1
- com.sun.lwuit.layouts.BoxLayout.getPreferredSize(), bci=38
- com.sun.lwuit.Container.calcPreferredSize(), bci=5
- com.sun.lwuit.Component.preferredSize(), bci=28
- com.sun.lwuit.Component.getPreferredSize(), bci=1
- com.sun.lwuit.Component.getPreferredH(), bci=1
- com.sun.lwuit.layouts.FlowLayout.getPreferredSize(), bci=70
- com.sun.lwuit.Container.calcPreferredSize(), bci=5
- com.sun.lwuit.Component.calcScrollSize(), bci=1
- com.sun.lwuit.Component.getScrollDimension(), bci=23
- com.sun.lwuit.Container.isScrollableY(), bci=8
- com.sun.lwuit.Component.getSideGap(), bci=1
- com.sun.lwuit.layouts.FlowLayout.layoutContainer(), bci=18
- com.sun.lwuit.Container.doLayout(), bci=5
- com.sun.lwuit.Container.layoutContainer(), bci=13
- com.sun.lwuit.Container.doLayout(), bci=37
- com.sun.lwuit.Container.layoutContainer(), bci=13
- com.sun.lwuit.Form.initFocused(), bci=20
- com.sun.lwuit.Form.show(), bci=25
- com.sun.lwuit.Form.show(), bci=2
- controler.SmartPhoneBanking.displayScreen(), bci=19
- view.MenuPrincipalForm.actionPerformed(), bci=56
- com.sun.lwuit.util.EventDispatcher.fireActionSync(), bci=19
- com.sun.lwuit.util.EventDispatcher.fireActionEvent(), bci=89
- com.sun.lwuit.Button.fireActionEvent(), bci=70
- com.sun.lwuit.Button.released(), bci=17
- com.sun.lwuit.Button.pointerReleased(), bci=1
- com.sun.lwuit.Form.pointerReleased(), bci=93
- com.sun.lwuit.Component.pointerReleased(), bci=7
- com.sun.lwuit.Display.handleEvent(), bci=125
- com.sun.lwuit.Display.edtLoopImpl(), bci=115
- com.sun.lwuit.Display.mainEDTLoop(), bci=198
- com.sun.lwuit.RunnableWrapper.run(), bci=242
- java.lang.Thread.run(), bci=11