Java me LWUIT组件对象中克隆的替代方法

Java me LWUIT组件对象中克隆的替代方法,java-me,lwuit,Java Me,Lwuit,情况:- 在我的代码中,我必须为listview控件使用LWUIT组件对象。控件是动态的,因此可以是任意数量的。 现在,我正在根据控件(以数字表示)创建组件对象,也就是说,对于要首先创建的每个控件,组件对象正在创建。 当控件增加时,此过程会减慢listview的渲染速度 解决方案:- 如果我创建Component对象并在所有控件的循环中使用它,它将引用该对象,因此显示具有相同数据的所有listview项(控件)。 现在我可以考虑克隆我的对象并使用它创建控件的最后一个选项 问题:- 但我在LWUI

情况:-

在我的代码中,我必须为listview控件使用LWUIT组件对象。控件是动态的,因此可以是任意数量的。 现在,我正在根据控件(以数字表示)创建组件对象,也就是说,对于要首先创建的每个控件,组件对象正在创建。 当控件增加时,此过程会减慢listview的渲染速度

解决方案:-

如果我创建Component对象并在所有控件的循环中使用它,它将引用该对象,因此显示具有相同数据的所有listview项(控件)。 现在我可以考虑克隆我的对象并使用它创建控件的最后一个选项

问题:-

但我在LWUIT中找不到任何可以实现对象复制的方法

LWUIT中有哪些替代方案可以解决此问题


注意:listview项的类型相同,但数据不同。

使用列表组件和渲染器设计模式创建“橡皮戳”组件,您可以在其中轻松显示大量元素。请参见代号1中的说明

首先创建这些
class
es:

public class ListUtil {

    private Vector data = new Vector();
    private Content[] contents;

    public ListUtil(Vector vData)
    {
        data = vData;
        contents = new Content[vData.size()];
    }

    public List createList(Display display, CListCell renderer, ActionListener listener)
    {
        CList theList;
        for(int i = 0; i < data.size(); i++)
        {
            contents[i] = new Content(String.valueOf(data.elementAt(i)));
        }
        theList = new CList(display, contents, renderer, listener);
        return theList;
    }
}

public class Content
{
    private String  row;

    public Content(String row)
    {
        this.row = row;
    }

    public String getRow()
    {
        return (row);
    }
}

public class CListCell extends Container implements ListCellRenderer {

    private Label focus = new Label("");

    public CListCell()
    {
        super();
        // create and add the components here among the components which will display data
    }
    public Component getListCellRendererComponent(List list, Object value, int index, boolean isSelected)
    {
        Content entry = null;
        if (value instanceof Content)
            entry = (Content)value;
        componentDisplayingDataAddedIntoThisListCellRenderer.setText(entry.getRow());
        return this;
    }
    public Component getListFocusComponent(List arg0)
    {
        return focus;
    }
}

public class CList extends List {
    private Display disp;
    public CList(Display display, Object[] data, CListCell renderer, ActionListener actionListener)
    {
        super(data);
        setListCellRenderer(renderer);
        setIgnoreFocusComponentWhenUnfocused(true);
        addActionListener(actionListener);
        setScrollAnimationSpeed(getScrollAnimationSpeed()/4);
        disp = display;
    }
    public void pointerReleased(int x,int y)
    {
        if (isEnabled() && hasFocus())
            super.pointerReleased(x, y);
    }
    public void keyReleased(int keyCode)
    {
        if (isEnabled() && hasFocus())
        {
            if (disp.getGameAction(keyCode) == Display.GAME_FIRE)
                pointerReleased(getX(),getY());
            else
                super.keyReleased(keyCode);
        }
    }
}

列表项目是否相同?那就是:他们的长相是一样的吗?它们只是在显示的值上有所不同吗?是的,listview应该包含相同类型的项。每个项目的数据都不一样。回答得好。我编辑它是为了更详细地解释什么是列表模型/渲染器以及如何使用它们进行大规模缩放。非常感谢:实际上什么是
codenameone
?这是我第一次听到它!这是我们的新项目,可以将其视为LWUIT的自然发展。
public class myForm extends Form implements ActionListener
{
    private Vector listSource = // your vector of data
    private CListCell renderer = new CListCell();
    private List theList = (new ListUtil(listSource)).createList(Display.getInstance(),renderer, this);
    ...
    public void actionPerformed(ActionEvent evt)
    {
       if (evt.getSource() == theList)
            doSomething();
    }
}