在网上搜索有关于Lwuit之List详解,结果有很多是让我不满意的,基本上都把List讲解得很复杂..自己摸索了一下,其实也挺简单的...
最重要的是只要清楚list.setListCellRenderer(ListCellRenderer cellRenderer)的用法,在此我也不详说,大家自己看代码,我会在代码里加了点点注释...
 
1.Entity又叫实体层(Model),一个非常普通的的POJO类.
package com.lwuit.textarea.list2;

public class Person {
  private String id;
  private String name;
  public String getId() {
    return id;
  }
  public void setId(String id) {
    this.id = id;
  }
  public String getName() {
    return name;
  }
  public void setName(String name) {    
    this.name = name;
  }    
}
 
2.View层,主要负责视图的展示:
package com.lwuit.textarea.list2;

import java.util.Vector;

import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;

import com.sun.lwuit.Display;
import com.sun.lwuit.Form;
import com.sun.lwuit.List;
import com.sun.lwuit.animations.CommonTransitions;
import com.sun.lwuit.events.ActionEvent;
import com.sun.lwuit.events.ActionListener;
import com.sun.lwuit.layouts.BorderLayout;
import com.sun.lwuit.plaf.UIManager;
import com.sun.lwuit.util.Resources;

public class ListTestMIDlet extends MIDlet{

  protected void startApp() throws MIDletStateChangeException {
    Display.init(this);    
                try {
                            Resources r = Resources.open("/resources.res");
                         UIManager.getInstance().setThemeProps(r.getTheme(
                                r.getThemeResourceNames()[0])
                                 );
                } catch (java.io.IOException e) {
                }                
                
                //1. create Listmodel
                Vector vector = new Vector();                
                Person p1 =new Person();
                p1.setId("001");                
                p1.setName("张三");
                
                
                Person p2 =new Person();
                p2.setId("002");
                p2.setName("ZhangSan");
                
                Person p3 =new Person();
                p3.setId("003");
                p3.setName("LiSin");
                
                Person p4 =new Person();
                p4.setId("004");
                p4.setName("王五");
                
                vector.addElement(p1);
                vector.addElement(p2);
                vector.addElement(p3);
                vector.addElement(p4);
        
                
                
                //2.add an to list
                List list = new List(vector);
                //3.setListCellRenderer
                list.setListCellRenderer(new MyPersonRenderer());    //重点在于此,创建一个渲染对象,负责对数据的展示
                
                list.addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent evt) {
          Person p = (Person)( (List)( evt.getSource() ) ).getSelectedItem();
          System.out.println(p.getId()+" "+p.getName()+" ");
        }        //中文此处会乱码,请不要在resources中设置font样式 

                });
                
                Form f = new Form();                
                f.setTitle("List Test标题");
                f.setTransitionOutAnimator(CommonTransitions.createFade(400));
                f.setLayout(new BorderLayout());
                
                f.addComponent(BorderLayout.CENTER, list);                
                f.show();
  }
    
  protected void destroyApp(boolean arg0) throws MIDletStateChangeException {
    
  }

  protected void pauseApp() {
    
  }
    
}
 
3.View层,负责对数据进行渲染..
package com.lwuit.textarea.list2;

import com.sun.lwuit.Component;
import com.sun.lwuit.Label;
import com.sun.lwuit.List;
import com.sun.lwuit.list.ListCellRenderer;

public class MyPersonRenderer extends Label implements ListCellRenderer
     
  //List中的把每一个对象,循环传递给Object,此处的Object对表的是我们的PJO类.
  public Component getListCellRendererComponent(List list, Object value, int index, boolean isSelected) {
    Person p =(Person)value;    
    this.setText(p.getId()+" "+p.getName());

    if(isSelected){   //如果为选中状态,字体前景颜色为红色
      this.getStyle().setFgColor(0xFF0000);
    }else{
      this.getStyle().setFgColor(0xFFFFFF);
    }
    return this;
  }

  public Component getListFocusComponent(List list) {
    Label label = new Label("");
    label.getStyle().setBgTransparency(100);
    return label;
  }

}
 
乱码问题:
   乱码问题困扰我一整晚上,后来经过我不断的测试,从wuit1.3 到 Lwuit1.5都是这样的.
解决方法是:
   请不要在resources.res文件里设置font样式,否则,将不会显示中文,TextField 和 TextArea我测试却可以正常获得中文.
 
在整个里面我却没有提到Contorl层,其实,大家可以这样理解,控制层就是事件处理层...
运行后,效果如下图
Lwuit List详解

转载于:https://blog.51cto.com/kinglixing/775706

相关文章: