最近在做个类似的 lwuit 表格形式的。可是就是到这里卡住了。。
幸运的是 张国威 发表了这篇文章。
本文来自http://blog.csdn.net/hellogv/ ,引用必须注明出处!
最近越来越多人用LWUIT,问得问题也越来越多了。最近超级多人问的是,如何使用List实现表格。以前我用Grid实现了表格(http://blog.csdn.net/hellogv/archive/2009/01/12/3759984.aspx ),现在就来说说如何使用List是一个表格。
先来对比一下Grid表格与List表格:
Grid表格 List表格
Grid表格与List表格所消耗的资源差不多,List所使用的结构和控件(都是Label)略多,但是Grid使用的是Button(衍生于Label,但是多很多方法和属性),所以两者的运行速度都差不多,至于用哪个,就看你喜欢了。
本文关键的两个文件是:Cls_CellList. java 和ListDemo.java, Cls_CellList. java 封装了本文所用的List,而 ListDemo.java则是演示使用,代码简单易明,一般人也能看懂,呵呵呵。
Cls_CellList. java主要使用了ListCellRenderer这个东西,源代码如下:
view plaincopy to clipboardprint?
package com.sun.lwuit.uidemo;
import com.sun.lwuit.Component;
import com.sun.lwuit.Container;
import com.sun.lwuit.Label;
import com.sun.lwuit.List;
import com.sun.lwuit.events.ActionListener;
import com.sun.lwuit.layouts.BorderLayout;
import com.sun.lwuit.layouts.BoxLayout;
import com.sun.lwuit.list.ListCellRenderer;
import com.sun.lwuit.plaf.Border;
public class Cls_CellList {
static public List createList(CellList[] celllist,int stringWidth,ActionListener lAListner) {
List list = new List(celllist);
list.getStyle().setBgTransparency(0);
//开始显示List
list.setListCellRenderer(new CellRenderer(celllist[0].getColumm().length,stringWidth));
//添加消息处理
list.addActionListener(lAListner);
return list;
}
static public class CellRenderer extends Container implements ListCellRenderer {
//初始化显示Columm每个字段的Label
private Label[] lbColumm ;
private Label focus = new Label("");
public CellRenderer(int size,final int stringWidth) {
lbColumm = new Label[size];
setLayout(new BorderLayout());
Container cnt = new Container(new BoxLayout(BoxLayout.X_AXIS));
for(int i=0;i<lbColumm.length;i++)//定义显示Columm每个字段的Label
{
lbColumm[i]=new Label(){
//很多人都问怎么setWidth平时没什么用,这是因为setWidth必须在重载的时候使用,LWUIT奇怪的地方之一!
public void setWidth(int arg0) {
super.setWidth(stringWidth);
}
};
lbColumm[i].getStyle().setFgColor(getStyle().getFgSelectionColor());//设置为最亮的颜色
lbColumm[i].getStyle().setBgTransparency(0);//设置背景为透明,不然会遮挡focus影响外观
cnt.addComponent(lbColumm[i]);
}
addComponent(BorderLayout.CENTER, cnt);
focus.getStyle().setBgTransparency(255);
focus.getStyle().setBorder(Border.createRoundBorder(10, 10));
}
public Component getListCellRendererComponent(List list, Object value, int index, boolean isSelected) {
CellList cellList = (CellList) value;
for(int i=0;i<lbColumm.length;i++)
{
lbColumm[i].setText(cellList.getColumm()[i]);
}
return this;
}
public Component getListFocusComponent(List list) {
//Columm栏不具备选中事件
if(list.getSelectedIndex()>0)
return focus;
return null;
}
}
static public class CellList {
//保存该列的所有字段
private String[] lstColumm;
public CellList(String[] columm) {
//复制数组
lstColumm=new String[columm.length];
System.arraycopy(columm, 0, lstColumm, 0, lstColumm.length);
}
//返回该列
public String[] getColumm(){
return lstColumm;
}
}
}
package com.sun.lwuit.uidemo;
import com.sun.lwuit.Component;
import com.sun.lwuit.Container;
import com.sun.lwuit.Label;
import com.sun.lwuit.List;
import com.sun.lwuit.events.ActionListener;
import com.sun.lwuit.layouts.BorderLayout;
import com.sun.lwuit.layouts.BoxLayout;
import com.sun.lwuit.list.ListCellRenderer;
import com.sun.lwuit.plaf.Border;
public class Cls_CellList {
static public List createList(CellList[] celllist,int stringWidth,ActionListener lAListner) {
List list = new List(celllist);
list.getStyle().setBgTransparency(0);
//开始显示List
list.setListCellRenderer(new CellRenderer(celllist[0].getColumm().length,stringWidth));
//添加消息处理
list.addActionListener(lAListner);
return list;
}
static public class CellRenderer extends Container implements ListCellRenderer {
//初始化显示Columm每个字段的Label
private Label[] lbColumm ;
private Label focus = new Label("");
public CellRenderer(int size,final int stringWidth) {
lbColumm = new Label[size];
setLayout(new BorderLayout());
Container cnt = new Container(new BoxLayout(BoxLayout.X_AXIS));
for(int i=0;i<lbColumm.length;i++)//定义显示Columm每个字段的Label
{
lbColumm[i]=new Label(){
//很多人都问怎么setWidth平时没什么用,这是因为setWidth必须在重载的时候使用,LWUIT奇怪的地方之一!
public void setWidth(int arg0) {
super.setWidth(stringWidth);
}
};
lbColumm[i].getStyle().setFgColor(getStyle().getFgSelectionColor());//设置为最亮的颜色
lbColumm[i].getStyle().setBgTransparency(0);//设置背景为透明,不然会遮挡focus影响外观
cnt.addComponent(lbColumm[i]);
}
addComponent(BorderLayout.CENTER, cnt);
focus.getStyle().setBgTransparency(255);
focus.getStyle().setBorder(Border.createRoundBorder(10, 10));
}
public Component getListCellRendererComponent(List list, Object value, int index, boolean isSelected) {
CellList cellList = (CellList) value;
for(int i=0;i<lbColumm.length;i++)
{
lbColumm[i].setText(cellList.getColumm()[i]);
}
return this;
}
public Component getListFocusComponent(List list) {
//Columm栏不具备选中事件
if(list.getSelectedIndex()>0)
return focus;
return null;
}
}
static public class CellList {
//保存该列的所有字段
private String[] lstColumm;
public CellList(String[] columm) {
//复制数组
lstColumm=new String[columm.length];
System.arraycopy(columm, 0, lstColumm, 0, lstColumm.length);
}
//返回该列
public String[] getColumm(){
return lstColumm;
}
}
}
ListDemo.java源代码如下:
view plaincopy to clipboardprint?
/*
* Copyright ?2008 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*
*/
package com.sun.lwuit.uidemo;
import com.sun.lwuit.Command;
import com.sun.lwuit.Font;
import com.sun.lwuit.Form;
import com.sun.lwuit.List;
import com.sun.lwuit.events.ActionEvent;
import com.sun.lwuit.events.ActionListener;
import com.sun.lwuit.layouts.BorderLayout;
public class ListDemo implements ActionListener {
public Form form = new Form("ListDemo");
private Command backCommand = new Command("Back", 1);
private String[][] myList = {
{" 标题1 "," 标题2 "," 标题3 "," 标题4 "},//表格每个字段的显示长度由标题栏的最长一项决定
{"aaaaa","bbbbb","ccccc","ddddd"},
{"11111","222222","33333","444444"},
{"aaaaa","bbbbb","ccccc","ddddd"},
{"11111","222222","33333","444444"},
{"aaaaa","bbbbb","ccccc","ddddd"},
{"11111","222222","33333","444444"},
{"aaaaa","bbbbb","ccccc","ddddd"},
{"11111","222222","33333","444444"}
};
ListDemo(){
form.setLayout(new BorderLayout());
form.addCommand(backCommand);
form.setScrollable(true);
//定义列表的列数
Cls_CellList.CellList[] cellArray = new Cls_CellList.CellList[myList.length];
for (int i = 0; i < cellArray.length; i++) {
cellArray[i] = new Cls_CellList.CellList(myList[i]);
}
//取得Columm的标题栏中长度最大的一项
int stringWidth=0;
for(int i=0;i<myList[0].length;i++)
{
int size=Font.getDefaultFont().stringWidth(myList[0][i])+8;//给最长的字段留点空余
if(stringWidth<size)
stringWidth=size;
}
//构造list并且显示
form.addComponent(BorderLayout.CENTER,Cls_CellList.createList(cellArray,stringWidth,new ListActionListener()));
form.setCommandListener(this);
}
public void actionPerformed(ActionEvent arg0) {
Command command=arg0.getCommand();
if(command==backCommand)
UIDemoMIDlet.backToMainMenu();
}
//按下列表触发的事件
private class ListActionListener implements ActionListener {
public void actionPerformed(ActionEvent evt) {
int selectIndex=((List)evt.getSource()).getSelectedIndex();
String str="";
for(int i=0;i<myList[selectIndex].length;i++)
str=str+myList[selectIndex][i]+"_";
form.setTitle(str);
}
}
}
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/hellogv/archive/2009/11/04/4767263.aspx
分享到:
相关推荐
在Java ME平台上,LWUIT( Lightweight UI Toolkit)是一个轻量级的用户界面库,用于构建功能丰富的移动应用程序。LWUIT提供了多种组件,其中包括List组件,它类似于一个可滚动的列表,通常用来显示一系列的项目。...
1. **组件库**:LWUIT提供了丰富的组件集合,如按钮、文本框、标签、列表、表格等,这些组件可以方便地进行布局管理和定制,以满足各种界面需求。 2. **样式表支持**:LWUIT允许开发者使用CSS(层叠样式表)来定义...
标题中的“lwuit实例 lwuit j2me 界面”指的是使用LWUIT库在J2ME(Java 2 Micro Edition)环境中创建的实际应用案例,展示了如何通过LWUIT来设计和实现用户界面。J2ME是Java平台的一个子集,主要用于嵌入式系统和...
Lwuit在blackberry上的移植版本,使用subversion签下来的,我把这个从lwuit-incubator中提取出来的,里面有DOC和源码,不过它把4.2-4.7版本放在一起了,应用的时候需要根据自己项目实际进行裁剪和修改。
**LWUIT(Lightweight User Interface Toolkit)**是Java ME平台上的一个开源用户界面库,主要用于创建具有丰富图形效果和交互性的移动应用。这个库在早期的Java ME开发中非常流行,因为它允许开发者构建出与桌面...
LWUIT.jarLWUIT.jarLWUIT.jarLWUIT.jarLWUIT.jarLWUIT.jar
通过逐行阅读和分析,你可以学习到如何组织代码结构,以及如何使用LWUIT进行事件监听、组件定制和动画效果的实现。 总的来说,这个压缩包是一个宝贵的资源,对于想要学习和精通LWUIT的J2ME开发者来说,它提供了直接...
综上所述,"lwuit最新源代码"包含了LWUIT框架对表格和树形视图的最新支持,以及整个框架的其他核心功能,对于Java ME平台上的移动应用开发者来说,这是一个宝贵的资源,可以帮助他们构建具有吸引力和交互性的用户...
《Lwuit实现九宫图特效程序详解》 在移动应用开发领域,LWUIT( Lightweight UI Toolkit)是一个强大的UI框架,它为Java ME(Micro Edition)提供了丰富的用户界面组件和动画效果。本文将深入探讨如何利用LWUIT来...
通过对LWUIT 1.3源代码的学习,开发者不仅能掌握LWUIT库的使用,还能深入了解UI设计的原理和实践,提升J2ME应用开发能力。同时,由于LWUIT后来被集成到NetBeans IDE的MIDP插件中,学习LWUIT对于使用NetBeans进行J2ME...
通过详细研究这个LWUIT_MakeOver源码,开发者不仅可以学习到如何有效地使用List组件,还能掌握LWUIT库的其他关键特性,提升在Java ME平台上的UI设计能力。在实际项目中,可以借鉴这些实践,为你的应用程序创造更出色...
LWUIT( Lightweight UI Toolkit)是Java ME平台上用于构建用户界面的一个库,它提供了一组丰富的组件和动画效果,使得开发者能够创建具有吸引力的移动应用。在使用LWUIT时,可能会遇到各种问题,以下是一些常见的...
1. **本地富文本渲染**:在许多情况下,开发者可能需要在应用中展示带有格式的文本,比如加粗、斜体、图片以及小表格。使用HTMLComponent,只需创建一个描述所需场景的HTML文档,就可以轻松实现这些效果。这对于帮助...
LWUIT(Lightweight User Interface Toolkit)是Java ME平台上的一个开源用户界面库,它为开发者提供了丰富的UI组件和强大的设计工具,使得在移动设备上创建美观、交互性强的应用程序变得更加简单。这篇开发指南将...
标题中的"lwuit.rar_J2ME lwuit_LWUIT_j2me_j2me LWU_九宫"表明这是一个与LWUIT相关的压缩包,内容可能包含了实现J2ME平台上九宫图功能的代码或资源。 九宫图是一种常见的界面布局方式,通常用于显示多个小视图,如...
LWUIT( Lightweight UI Toolkit )是Java ME(Micro Edition)平台上的一款开源用户界面库,专为移动设备设计,提供了一套丰富的组件和强大的动画效果,以创建吸引人的、交互性强的用户界面。这个名为“lwuit.rar_...
这个库提供了一种轻量级、高效的UI组件,包括表格(Table)和树(Tree)控件,使得在资源有限的移动设备上也能创建丰富的图形界面。在描述中提到的" lwuit table tree最新源码还有tree table 源码",是指LWUIT库中...
**LWUIT (Lightweight User Interface Toolkit)** 是Java ME(J2ME)平台上的...总的来说,通过这个LWUITDemo,开发者可以全面了解并掌握LWUIT在J2ME平台上的使用,提升应用的用户体验,创造出既美观又高效的移动应用。
1. **组件丰富**:LWUIT 提供了多种预定义的组件,如按钮、文本框、列表、表格等,满足了移动应用的基本需求。 2. **主题定制**:LWUIT 支持主题的创建和应用,开发者可以通过修改XML配置文件,轻松改变应用的整体...