自定义list分页控件(lwuit)

J2ME、lwuit

自己做了一个list分页控件,只需传入数据和每页显示条数

 


package com.longkey.terminal.common.km;

import java.util.Vector;

import com.longkey.terminal.entity.km.MyListBodyEntity;
import com.longkey.terminal.util.km.Utils;
import com.sun.lwuit.Button;
import com.sun.lwuit.Component;
import com.sun.lwuit.Container;
import com.sun.lwuit.Form;
import com.sun.lwuit.Image;
import com.sun.lwuit.Label;
import com.sun.lwuit.List;
import com.sun.lwuit.events.ActionEvent;
import com.sun.lwuit.events.ActionListener;
import com.sun.lwuit.layouts.BorderLayout;
import com.sun.lwuit.layouts.BoxLayout;
import com.sun.lwuit.list.DefaultListCellRenderer;
import com.sun.lwuit.list.ListCellRenderer;

/**
 * list分页控件
 *
 * @author zhoufei
 *
 */
public class MyList extends Container
{
 private Image   unSelectedImgBar, selectedImgBar;
 private Button   btnUpPage, btnDownPage, btnStart, btnEnd;
 private Label   lbPageNum;
 private int    listSize, pageCount = 0, pageNow = 1;
 private List   listNow;
 private Vector   data;
 private Container  listContainer = new Container(), btnContainer = new Container();
 private ActionListener listItemAction;

 /**
  *
  * @param v
  *            内容为MyListBodyEntity类型的Vector
  */
 public MyList(Vector v)
 {
  this(v, 4);
 }

 /**
  *
  * @param v
  *            内容为MyListBodyEntity类型的Vector
  * @param n
  *            每页显示的Item条数
  */
 public MyList(Vector v, int n)
 {
  if (v == null || v.size() == 0)
  {
   data = new Vector();
   MyListBodyEntity errorBody = new MyListBodyEntity();
   errorBody.setTitle("数据为空!");
   errorBody.setDate("请确认数据..");
   data.addElement(errorBody);
  }
  else
  {
   data = v;
  }
  listSize = n;
  init();
 }

 /**
  * 初始化
  */
 private void init()
 {
  btnUpPage = new Button(Utils.getImage("mylist_up.gif"));
  btnDownPage = new Button(Utils.getImage("mylist_down.gif"));
  btnStart = new Button(Utils.getImage("mylist_start.gif"));
  btnEnd = new Button(Utils.getImage("mylist_end.gif"));
  lbPageNum = new Label();
  setMargin(btnStart, 0, 0, 30, 5);
  setMargin(btnUpPage, 0, 0, 5, 10);
  setMargin(btnDownPage, 0, 0, 10, 5);
  setMargin(btnEnd, 0, 0, 5, 10);
  lbPageNum.getStyle().setMargin(0, 0, 10, 10);
  listContainer.setLayout(new BoxLayout(BoxLayout.Y_AXIS));
  listNow = loadData(pageNow - 1);
  listContainer.addComponent(listNow);
  btnContainer.setLayout(new BoxLayout(BoxLayout.X_AXIS));
  btnContainer.addComponent(btnStart);
  btnContainer.addComponent(btnUpPage);
  btnContainer.addComponent(lbPageNum);
  btnContainer.addComponent(btnDownPage);
  btnContainer.addComponent(btnEnd);
  setLayout(new BorderLayout());
  addComponent(BorderLayout.CENTER, listContainer);
  addComponent(BorderLayout.SOUTH, btnContainer);
  btnUpPage.addActionListener(new ActionListener()
  {
   public void actionPerformed(ActionEvent evt)
   {
    pageNow--;
    rePraitList();
   }
  });
  btnDownPage.addActionListener(new ActionListener()
  {
   public void actionPerformed(ActionEvent evt)
   {
    pageNow++;
    rePraitList();
   }
  });
  btnStart.addActionListener(new ActionListener()
  {
   public void actionPerformed(ActionEvent evt)
   {
    gotoPage(1);
   }
  });
  btnEnd.addActionListener(new ActionListener()
  {
   public void actionPerformed(ActionEvent evt)
   {
    gotoPage(pageCount);
   }
  });
 }

 /**
  * 重绘List
  */
 private void rePraitList()
 {
  listContainer.removeAll();
  listNow = loadData(pageNow - 1);
  listNow.addActionListener(listItemAction);
  listContainer.addComponent(listNow);
  Form retVal = null;
  Component parent = getParent();
  if (parent != null)
  {
   retVal = parent.getComponentForm();
  }
  if (retVal != null)
  {
   retVal.layoutContainer();
   retVal.repaint();
  }
  else
  {
   layoutContainer();
   repaint();
  }
 }

 /**
  * 设置边距
  */
 private void setMargin(Button btn, int top, int bottom, int left, int right)
 {
  btn.getStyle().setMargin(top, bottom, left, right);
  btn.getUnselectedStyle().setMargin(top, bottom, left, right);
  btn.getSelectedStyle().setMargin(top, bottom, left, right);
  btn.getPressedStyle().setMargin(top, bottom, left, right);
 }

 /**
  * 创建List
  */
 private List createList(MyListBodyEntity[] bodys, ListCellRenderer renderer)
 {
  List list = new List(bodys);
  list.getStyle().setBgTransparency(0);
  list.setListCellRenderer(renderer);
  list.setOrientation(List.VERTICAL);
  list.setPaintFocusBehindList(true);
  return list;
 }

 /**
  * 图片渲染器
  */
 class ImageRenderer extends DefaultListCellRenderer
 {
  private Label focus = new Label("");

  public ImageRenderer()
  {
   super(false);
  }

  public Component getListCellRendererComponent(List list, Object value, int index, boolean isSelected)
  {
   super.getListCellRendererComponent(list, "", index, isSelected);
   setIcon(selectedImgBar);
   return this;
  }

  public Component getListFocusComponent(List list)
  {
   return focus;
  }
 }

 /**
  * Body块渲染器
  *
  * @author zhoufei
  *
  */
 class BodyRenderer extends Container implements ListCellRenderer
 {
  private Label bodyContent = new Label("");
  private Label bodyDate = new Label("");
  private Label bar   = new Label("");
  private Label focus  = new Label("");

  public BodyRenderer()
  {
   setLayout(new BorderLayout());
   addComponent(BorderLayout.WEST, bar);
   Container cnt = new Container(new BoxLayout(BoxLayout.Y_AXIS));
   bodyContent.getStyle().setBgTransparency(0);
   bar.getStyle().setBgTransparency(0);
   bodyDate.getStyle().setBgTransparency(0);
   cnt.addComponent(bodyContent);
   cnt.addComponent(bodyDate);
   addComponent(BorderLayout.CENTER, cnt);
   focus.setFocus(true);
  }

  public Component getListCellRendererComponent(List list, Object value, int index, boolean isSelected)
  {
   MyListBodyEntity b = (MyListBodyEntity) value;
   if (isSelected)
   {
    setFocus(isSelected);
    bar.setIcon(selectedImgBar);
    getStyle().setBgTransparency(100);
    getStyle().setBgColor(0x008080);
   }
   else
   {
    bar.setIcon(unSelectedImgBar);
    getStyle().setBgTransparency(100);
    getStyle().setBgColor(0x4169E1);
   }
   bodyContent.setText(b.getTitle());
   bodyDate.setText(b.getDate());
   return this;
  }

  public Component getListFocusComponent(List list)
  {
   return focus;
  }
 }

 /**
  * 算总页数,返回Bean二维数组
  *
  * @param data 内容为MyListBodyEntity类型的Vector
  * @return 分页后的所有结果
  */
 private MyListBodyEntity[][] getAllPage(Vector data)
 {
  int length = data.size();
  // 算总页数
  pageCount = (length + listSize - 1) / listSize;
  MyListBodyEntity[][] page = new MyListBodyEntity[pageCount][];
  int i = 0;
  int num = pageCount;
  for (int j = 0; j < length;)
  {
   if (num > 1)
   {
    page[i] = new MyListBodyEntity[listSize];
    for (int k = 0; k < listSize; k++)
    {
     page[i][k] = (MyListBodyEntity) data.elementAt(j);
     j++;
    }
    i++;
    num--;
   }
   // 最后一页,处理不同情况的显示条数
   if (num == 1)
   {
    if (length % listSize == 0)
    {
     page[i] = new MyListBodyEntity[listSize];
     for (int k = 0; k < listSize; k++)
     {
      page[i][k] = (MyListBodyEntity) data.elementAt(j);
      j++;
     }
    }
    else
    {
     page[i] = new MyListBodyEntity[length % listSize];
     for (int k = 0; k < length % listSize; k++)
     {
      page[i][k] = (MyListBodyEntity) data.elementAt(j);
      j++;
     }
    }
   }
  }
  return page;
 }

 /**
  * 加载当前页
  *
  * @param pageNum
  *            当前页码
  * @return 对应页码的list
  */
 private List loadData(int pageNum)
 {
  MyListBodyEntity[][] pagesData = getAllPage(data);
  pageButtonShow();
  lbPageNum.setText(pageNow + "/" + pageCount);
  return createList(pagesData[pageNum], new BodyRenderer());

 }

 /**
  * 上下页按钮控制
  */
 private void pageButtonShow()
 {
  if (pageNow == 0)
  {
   btnUpPage.setEnabled(false);
   btnDownPage.setEnabled(false);
   return;
  }
  if (pageNow == 1)
  {
   btnUpPage.setEnabled(false);
  }
  else
  {
   btnUpPage.setEnabled(true);
  }
  if (pageNow == pageCount)
  {
   btnDownPage.setEnabled(false);
  }
  else
  {
   btnDownPage.setEnabled(true);
  }
 }

 /**
  * 根据页码跳转页面
  *
  * @param pageNum
  *            当前页码
  * @return 页码对应的list
  */
 public List gotoPage(int pageNum)
 {
  if (pageNum <= pageCount && pageNum >= 0)
  {
   this.pageNow = pageNum;
   rePraitList();
   return getListNow();
  }
  if (pageNum > pageCount && pageCount > 0)
  {
   this.pageNow = pageCount;
   rePraitList();
   return getListNow();
  }
  return null;
 }

 /**
  * 获得未选时显示图片
  *
  * @return 未选图片
  */
 public Image getUnSelectedImgBar()
 {
  return unSelectedImgBar;
 }

 /**
  * 设置未选时显示图片
  *
  * @param unSelectedImgBar
  *            未选图片
  */
 public void setUnSelectedImgBar(Image unSelectedImgBar)
 {
  this.unSelectedImgBar = unSelectedImgBar;
 }

 /**
  * 获得选中时显示图片
  *
  * @return 选中图片
  */
 public Image getSelectedImgBar()
 {
  return selectedImgBar;
 }

 /**
  * 设置选中时显示图片
  *
  * @param selectedImgBar
  *            选中图片
  */
 public void setSelectedImgBar(Image selectedImgBar)
 {
  this.selectedImgBar = selectedImgBar;
 }

 /**
  * 获得当前页
  *
  * @return 当前页list
  */
 public List getListNow()
 {
  return listNow;
 }

 /**
  * 设置ListItem的ActionListener监听
  *
  * @param listItemAction
  */
 public void setActionListener(ActionListener listItemAction)
 {
  this.listItemAction = listItemAction;
  listNow.addActionListener(listItemAction);// 不设置第一次加载不了监听
 }

 /**
  * 获得ListItem的selectedIndex
  *
  * @return 当前选中的Item的Index
  */
 public int getSelectListItem()
 {
  return (pageNow - 1) * listSize + listNow.getSelectedIndex();
 }

 /**
  * 获取当前页码
  *
  * @return 当前页码
  */
 public int getPageNow()
 {
  return pageNow;
 }

 /**
  * 获得List大小,即一页显示ListItem的条数
  *
  * @return 每个List的size
  */
 public int getListSize()
 {
  return listSize;
 }

 /**
  * 获取总页数
  *
  * @return 总页数
  */
 public int getPageCount()
 {
  return pageCount;
 }
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值