今日更新
技术新闻
精彩专题
IBM软件技术专区
微软开发专区
技术文档中心
编程语言
网络通信
网络安全
LINUX/UNIX
软件工程与管理
数据库开发
WEB开发
企业应用与开发
移动开发
资源中心
原创专栏
开放系统世界
人才与培训
技术天地论坛
厂商列表
社区推荐

· 与陌生男人激情圣诞平..
· 与陌生男人激情圣诞平..
· 脱光衣服后还可以做朋..
· 连载当我们穷得只剩下..
· 什么样的女人最喜欢做..
· 消除男人怒气的四种方..
· “裸聊”能聊出些啥(..
· 两位大学波霸mm的爆笑..
赛迪网>>技术应用>>J2ME
如何向MIDP2.0窗体中加入自定义的项目 (1)
作者:Michael Powers 来源:http://www.javaresearch.org 发布时间:2005.06.27 
移动信息设备描述(Mobile Information Device Profile,MIDP) 1.0 版本提供了一套基本组件,用于支持应用程序需要的大多数用户界面(UI)。但是,如果您的需求比较复杂,那么一般必须要从 Canvas 派生子类,并重新设计。

MIDP 2.0 改变了所有这些。现在您可以建立自定义组件,这样您就可以对用户交互进行细粒度的控制,而且可以适应现有的窗体框架,符合设备本身的观感。

在这篇文章里,我们通过建立一个简单的 Outliner MIDlet,来研究这些新的定制功能。大纲是用来组织想法、保持列表,甚至进行项目计划的工具是一个在移动设备上非常有用的应用程序。

Outliner MIDlet让用户可以构建层次结构良好的窗体项目大纲。它们可以加入或删除,缩进或凸出,还可以用一种在 MIDP 2.0 出现之前不可能的方法折叠和展开项目。

如果您对于使用 MIDP 建立用户界面不熟,请让我们回顾一下基础知识。MIDP 1.0 提供了一些骨干 UI 组件,包括选项组(ChoiceGroup),日期字段(DateField), Gauge, 图像项目(ImageItem), 字符串项目(StringItem), 以及文本字段(TextField)。

这些类全部扩展自公共基类 Item。和它们的 AWT 等价物非常相似,项目是我们用来控制底层本机 UI 小部件的抽象。因为本机实现在不同设备之间,可能有很大的差异,而事实上也是这样,所以 Item 公共接口对于底层小部件的外观和行为只提供了非常少的控制。

窗体的存在,是为了按行排列项目,使其最好地适合屏幕尺寸、适应项目运行所在设备的能力。至少从理论上讲,MIDP 实现可以方便、无缝地使您的应用程序适应设备硬件;副作用是您对用户界面观感的影响受到限制。

有什么新东西? MIDP 2.0 改善了窗体,为项目布局提供了更好的控制,还提供了一个新类CustomItem,这个类让您可以建立自己的窗体项目。Outliner 利用全部这些能力,为用户提供以下特性:

1、应用程序显示多行文本,用不同的数量缩进,形成一个可视的层次结构。窗体增强的布局能力使这种表示成为可能。

2、用户可以折叠大纲的任何一行,把层次结构中该行之下的行隐藏起来。会有一个可视指示器,表示指定行是展开的还是折叠的。您可以覆盖 CustomItem 的 paint() 方法,按照自己喜欢的方式画出这样的指示器。

3、用户还可以按照任意顺序重新排列行。移动一个行,也会同时移动它所有的下级行。现在,这个命令可以专门用于一个项目,这样菜单就能够做到上下文敏感。向上移动、向下移动、展开、以及折叠命令只有在适合项目当前状态的时候才会出现。这些特性在 MIDP 1.0 里都是不可能的。下面让我们看看这种魔术是如何做到的。

建立 Outline 项目类 Outliner 类自己就是一个普通的 MIDlet。功能的核心是 CustomItem 的子类,叫做 OutlineItem。你要实现自己的 CustomItem 类时需要做的事,在这个类里都做了,所以您应当好好在源代码里看看它。构造函数是一个开始的好地方:

/**
* 用指定的初始缩进和文本建立 
OutlineItem
*/
public OutlineItem
( int inIndent, String inText )
{
    // 我们不想要系统提供的标签
    super( null );

    indent = inIndent;
    text = inText;
    hiddenChildren = null;

    // 定义布局
    setLayout( LAYOUT_EXPAND
	| LAYOUT_TOP | LAYOUT_NEWLINE_AFTER );

    // 加入一直适用的命令
    addCommand( editCommand );
    addCommand( insertCommand );
}


调用构造函数,把要显示的文本、项目应当缩进的次数传递给构造函数,就可以建立 OutlineItem。

在构造函数里,第一项任务是调用超类的构造函数。

MIDP 项目不仅仅代表 UI 小部件本身,还有一个标签向用户标识部件。例如,一个文本字段是一个包含文本的框;它的标签通常出现在它的左边,是描述文本框中内容的单词,比如 Name 或 Password。我们的构造函数把 null 作为必要参数传给超类的构造函数。

在使用传递给构造函数的参数初始化对象的状态之后,下一步就是配置项目的布局指令,把一些命令直接加给项目。稍后我会解释布局指令和专门用于项目的命令。

CustomItem 有5个我们必须实现的抽象方法。在这些方法里,paint() 方法可以让您控制项目的外观。paint()方法的参数包含项目的宽度和高度,它们由窗体的布局逻辑、图形对象、转换方式决定,所以它的原点项目的左上角。下面是 OutlineItem 中 paint() 的实现:

public void paint
( Graphics g, int w, int h )
{
    // 用背景色全部清除
    g.setColor( DISPLAY.getColor
	( DISPLAY.COLOR_BACKGROUND ) );
    g.fillRect( 0, 0, w, h );
    
    // 现在用前景色来画图
    g.setColor( DISPLAY.getColor
	( DISPLAY.COLOR_FOREGROUND ) );

    if ( isCollapsed() )
    {
        // 画一个代表隐藏项目的填充的圆
        g.fillArc( indent *
		INDENT_MARGIN + 2, 2, 
            FONT_HEIGHT-7,
			FONT_HEIGHT-7, 0, 360 );
    }
    else
    {
        // 没有隐藏项目,所以画一个空心圆
        g.drawArc( indent * INDENT_MARGIN + 2, 2, 
            FONT_HEIGHT-7, FONT_HEIGHT-7, 0, 360 );
    }
    
    // 画出文本
    g.drawString( text, 
        indent * INDENT_MARGIN 
		+ FONT_HEIGHT, 0, g.TOP | g.LEFT );
}


通过二次调用 Display 的 getColor() 方法,我们找到设备的默认背景色和前景色,每次把适当的常数传递给这个方法,先用 COLOR_BACKGROUND(背景色),然后用 COLOR_FOREGROUND(前景色)。

不管我们选择使用默认颜色还是指定自己的颜色,OutlineItem.paint()都会用背景色填充一个矩形,然后切换成前景色画剩下的内容。

请注意:MIDP 规范要求,在画图的时候,必须覆盖项目显示区域的每一个象素。有些实现可能会在调用 paint()之前清除项目覆盖的区域,但是其它一些实现可能不会。如果您没有先用背景色填充矩形,那么您就会冒着失去可移植性的风险。


1 2 3 4 下一页>>



赛迪网推出“IT博客”,花不到一分钟就完成注册
评论】 【推荐】 【 】 【打印】 【关闭

·Linux专区· ·黑客攻防·
· 制作个版本Linux启动盘的四种通行方法
· 新手入门:浅谈Linux的文件系统
· 循序渐进学习系列之Linux的软件配置
· 实战讲解防范网络钓鱼技术大全
· 如何让你的ASP运行于非Windows平台
· 如何建立安全的ProFTPD应用经验谈(全)
· 2005黑客被捕案例与网络诈骗事件总整理
· 舍远求近 IE6中如何实现反钓鱼功能
· 天堑变通途 网络入侵也玩双通道(图)
· 上网安全 谨防ActiveX插件成病毒帮凶
· IT风险评估及风险管理之入侵防护篇
· IT风险评估及风险管理之应用安全篇
·中国信息化· ·成功案例·
· 2005年度CIO评选揭晓 关注信息化建设尖兵
· 专题策划:中国信息化盘点2005 展望2006
· 姜奇平:信息化与后现代的统一战线
· 避免悲观与冒进 协同软件的选择之道
· 从价格走向价值 “白热化”的ERP新航向
· 北京短信报警平台将投入使用 接收电子报警
· 亮剑汽车制造 打造随需而动的采购供应链
· HP Integrity为金保工程添砖加瓦
· 山东农行采用HP方案打造数据上收前置系统
· 一百多人的大型企业:北一机床的数字化工厂
· 追日电气:ERP只是一个起点
· 中小企业信息化实践:冠盛破解ERP密码
*姓  名: 更多资料 了解方案 认识厂商
*单位名称:
*联系电话:
*电子邮件:
    
◆ 相关文章   ◆ 站内热点推荐
· Eclipse+Tomcat+Lomboz的安装配置说明
· 详解怎样使用Axis开发Web Service的实例
· Java升级篇:ANT十五大最佳实践详解
· 初级篇:最简单的Hibernate入门简介
· IPv6协议在各操作系统下的安装与配置
· 网管员论坛
· 开发者之家
· WLAN无限未来
· 我是如何掉进C#的……
· 中国“人件”非正式调查

   
合作网站: IBM dW中国网站 LinuxAID 软件工程专家网 中国系统分析员 UMLChina MATRIX Mobile2008 JavaResearch 华储网 UML软件工程组织 中国JAVA手机网 JAVA中文站 金山在线 海量科技