LWUIT ComboBox: класс как предметы - PullRequest
1 голос
/ 21 марта 2012

Я использую ComboBox в LWUIT.Мой код выглядит следующим образом.

public Locations(String name, int X, int Y)
{
    Name = name;
    xLocation = X;
    yLocation = Y;
}

Я составил список Locations

private List getLocations()
{
    List list = new List();
    list.addItem(new Locations("Landmark1", 23, 40));
    list.addItem(new Locations("Landmark3", 24, 40));
    list.addItem(new Locations("Landmark4", 25, 40));
    list.addItem(new Locations("Landmark6", 26, 40));

    return list;
}

Затем сделал ComboBox, содержащий список.

comboBox_Locations = new ComboBox(getLocations().getModel());

Теперь моя проблема в том, как я могу отображать только имя местоположения в ComboBox?Я знаю, что могу составить список строк имени местоположения, например:

private List getLocations()
{
    List list = new List();
    list.addItem(new Locations("Landmark1", 23, 40).Name);
    list.addItem(new Locations("Landmark3", 24, 40).Name);
    list.addItem(new Locations("Landmark4", 25, 40).Name);
    list.addItem(new Locations("Landmark6", 26, 40).Name);

    return list;
}

Но когда я получаю selectedItem, он получает только имя, а я не могу получить координаты.Я хотел получить такой класс:

Object item =  comboBox_Locations.getSelectedItem();
            if (item.getClass() == Locations.class) 
            {
                String Name = ((Locations)item).Name.toString();
                int xCoords = ((Locations)item).getX();
                int yCoords = ((Locations)item).getY();
            }

, чтобы я мог использовать xCoords и yCoords.

Ответы [ 3 ]

3 голосов
/ 21 марта 2012

Использовать рендер:

list.setRenderer(new DefaultListCellRenderer() {
    public Component getCellRendererComponent(Component list, Object model, Object value, int index, boolean isSelected) {
        String t = ((Locations)value).getName();
        return super.getCellRendererComponent(list, model, t, index, isSelected);
    }
 });
0 голосов
/ 30 марта 2012

Создайте свой собственный класс ListRenderer.

ListRenderer.java

import com.sun.lwuit.Component;
import com.sun.lwuit.Label;
import com.sun.lwuit.List;
import com.sun.lwuit.list.ListCellRenderer;
public class ListRenderer extends Label implements ListCellRenderer {

    public ListRenderer() {

    }
    public Component getListCellRendererComponent(List value, Object obj,
            int arg2, boolean isSelected) {
        // TODO Auto-generated method stub

        Locations listClassObj = (Locations) obj;

        Label listValue = new Label(listClassObj.Name);
        return listValue;
    }
    public Component getListFocusComponent(List arg0) {
        // TODO Auto-generated method stub
        setText("");
        setFocus(false);
        return this;
    }
    public void repaint() {
    }
}

Midlet:

затем другой метод преобразования строковых массивов в массив List

public ComboBox getList(String[] locations,int[] x,int[] y){
Locations[] locationObjs=new Locations[locations.length];
for(int i=0;i<locations.length;i++){
locationObjs=new Locations(locations[i],x[i],y[i]);
}
return new ComboBox(locationObjs);
}

private ComboBox getLocations(){
String[] locations={"landmark1","landmark2","landmark3","landmark4"};
int[] x={23,24,25,26};
int[] y={40,40,40};
ComboBox list=getList(locations,x,y);
return list;
}

затем установите его для выпадающего списка

combobox_locations=getLocations();
combobox_locations.setListCellRenderer(new ListRenderer());

, затем используйте следующий код

Object item =  comboBox_Locations.getSelectedItem();
            if (item.getClass() == Locations.class) 
            {
                String Name = ((Locations)item).Name.toString();
                int xCoords = ((Locations)item).getX();
                int yCoords = ((Locations)item).getY();
            }
0 голосов
/ 21 марта 2012

Хорошо, вы можете попробовать этот способ.Получить имена из Locations и добавить их в ListModel.Позже вы должны создать ComboBox, используя этот ListModel в качестве параметра.

...