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