`
wuhua
  • 浏览: 2112073 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

设计可组装的j2me UI(一) 核心部件

阅读更多
   最近发现很多朋友在设计j2me程序的时候,在有些关键的UI设计都放弃j2me提供的高级UI。而自己通过继承Canvas,而实现自己想要的效果。游戏的菜单设计一般都是这样。设计自己的UI是比较困难的,因为自己要控制屏幕的各个元素跟各个元素的低级事件。我想这些不是问题。主要还是很少有教程手把手的教你。小第我经过一个项目,而起这个项目的UI全部是自己实现。所以在这方面算是有点点经验。所以拿出来给大家分享下。
    我的设计思想是这样的。
    1。手机CPU,内存等资源都有限。手机屏幕各个厂商各不相同。
    2。手机基本不用考虑,窗口移动,拖动,缩放,重叠,窗口至顶等问题。
    3。手机窗口事件不用考虑,拖动,移动,缩放,鼠标等时间。因此问题就相对简单了。
    4:我们只需要实现,UI的显示跟文字,图片的排版显示,已经文字的滚动显示等。

    下面将是一些片段代码,希望。
    首先设计两个核心的类。
    1。Part -- 窗口显示部件。主要是一些可以组装的组件例如(TextField,TextBox)等
     
public abstract class Part {

	protected final int X = 0;

	protected final int Y = 1;

	protected final int WIDTH = 2;

	protected final int HEIGHT = 3;

	/**
	 * 位置的显示位置(相对手机屏幕的位置)
	 */
	protected int view[] = new int[4];

	/**
	 * 背景色
	 */
	protected int bgColor = 0x000000;

	/**
	 * 字体颜色
	 */
	protected int fontColor = 0xFFFFFF;

	protected int selectIndex;

	protected Canvas container;
	
	protected String label;
	  
	/** 每个Item都有自己的焦点 **/
	protected boolean hasFocus;

	protected PartChangeListener partChangeListener;
	
	public Part(int x, int y, int widht, int height) {
		view[X] = x;
		view[Y] = y;
		view[WIDTH] = widht;
		view[HEIGHT] = height;
	}

	public void setStyle(int bgColor, int fontColor) {
		this.bgColor = bgColor;
		this.fontColor = fontColor;
	}

	/**
	 * 默认字体
	 */
	protected Font font = Font.getDefaultFont();

	/**
	 * 资料实现绘制方法
	 * 
	 * @param g
	 */
	public abstract void paint(Graphics g);

	/**
	 * 事件
	 * 
	 * @param keyCode
	 */
	public abstract void onClick(int keyCode);

	public int getSelectIndex() {
	 
		return selectIndex;
	}

	public void setSelectIndex(int selectIndex) {
		this.selectIndex = selectIndex;
	}

	/**
	 * 改变部件的位置
	 */
	public void changePosition(int x, int y, int width, int height){
		view[X] = x;
		view[Y] = y;
		view[WIDTH] = width;
		view[HEIGHT] = height;	
	}

	public void setContainer(Canvas container) {
		this.container = container;
	}
	
	/**
	 * 聚焦,主要用户当前使用的Part。
	 * @param hasFocus
	 */
	public void setHasFocus(boolean hasFocus){
		this.hasFocus = hasFocus;
		 
	}
	
	public void setPartChangeListener(PartChangeListener partChangeListener) {
		this.partChangeListener = partChangeListener;
	}

	public int[] getView() {
		return view;
	}


    上面的类不足以显示,主要是通过下面的类,通过addPart方法添加进去。

public abstract class Panel extends Canvas {
	private static Log log = Log.getLog("Panel");

	final int X = 0;

	final int Y = 1;

	final int WIDTH = 2;

	final int HEIGHT = 3;

	/** 显示主要部分.比如菜单的Icon,List的数据的位置 */
	int[] viewContent = new int[4];

	Image icon;
	Part part;
	
	SoftButton softButton;
	
	Part timer;
	
	public Panel(){
		init();
	}
	public Panel(Image icon) {
		init();
		this.icon = icon;
		
		 
		//此方法是让所以的Panel都添加一个TimerPart
		//以后重构的时候应该�?�虑要不要这么做
		//this.setTimer(null);
	}
	private void init() {
		setFullScreenMode(true);
	 
		initViewContent();
		this.softButton = new SoftButton();
	}

	public void addCommand(Command cmd) {
		if (cmd == null)
			return;
		softButton.addCommand(cmd);
	}

	
	public Part getPart() {
		return part;
	}

	public void append(Part part){
		this.part = part;
	}
	public void setPartChangeListener(PartChangeListener partChangeListener) {
		this.part.setPartChangeListener(partChangeListener);
	}

	public void removeCommand(int type) {

		softButton.removeCommand(type);
	}

	public void setSoftButtonListener(CommandListener cmdListener) {
		if (softButton != null)
			softButton.setCommandListener(cmdListener);
	}

	public void setSoftButtonStyle(int bgColor, int fontColor){
		this.softButton.setStyle(bgColor, fontColor);
	}

	public abstract void paint(Graphics g);

	protected abstract void keyPressed(int keyCode);

	/**
	 * 长按事件
	 */
	protected void keyRepeated(int keyCode) {
		keyPressed(keyCode);
	}

 
	 
	private void initViewContent() {
		viewContent[X] = 0;
		viewContent[Y] = 45;
		viewContent[WIDTH] = Platform.WIDTH;
		viewContent[HEIGHT] = Platform.HEIGHT;
	}

	public SoftButton getSoftButton() {
		return softButton;
	}

	public void setSoftButton(SoftButton softButton) {
		this.softButton = softButton;
	}
	
    /**
     * 增加时间显示
     */
	public void setTimer(Part timer){
		this.timer = timer;
	}
	
	void paintTimerImpl(Graphics g){
		if(timer != null)
			timer.paint(g);
	}
	
	public void repaintTimer(){
		if(timer != null){
			int [] view = timer.getView();
			repaint(view[X],view[Y],view[WIDTH], view[HEIGHT] );
		}
			
	}

}


以上就是UI的核心,以后我将会逐渐介绍其他的组件跟相关的事件接口。读者也可以自己实现一些有意思的界面然后测试下,我相信效果会更好
分享到:
评论
2 楼 为你而来 2006-11-15  
多谢啦,正在查看呵,好好研究一下,我对这方面比较着
1 楼 tuti 2006-11-14  
那要看所针对的机型,允许装载多大体积的程序,多了1个类要多占不少体积.

相关推荐

    J2me UI库类 基于低级界面

    基于低级界面的j2me UI库类,有demo和源码。高级界面的东西虽然好用但是在不同的手机上面显示得不一样,有的好看有的很丑,但是基于低级界面的就不一样了。在不同手机上显示出来都是一样的,这个UI库类是企业级的。...

    J2ME高级UI总结

    LWUIT是一个强大的UI框架,它弥补了J2ME标准库在UI设计上的不足。LWUIT提供了丰富的组件库,如`Label`、`Button`、`TextArea`等,还支持布局管理器,如`BoxLayout`、`GridLayout`和`FlowLayout`,使得界面布局更加...

    MIE J2ME UI库 v1.0

    MIE UI库(下简称MIE)是一个开源的手机(J2ME)GUI编程框架,与PC电脑上的AWT/Swing/SWT有相似的用处。 MIE提供了一套基本的UI组件,包括文本标签、文本框、文本域、按钮、单选框、复选框、下拉菜单、对话框、菜单、...

    LWUIT j2me UI例子

    这些标签可能关联着一个项目或教程,旨在帮助开发者学习和掌握LWUIT的UI设计技巧。 在**压缩包子文件的文件名称“LWUITDemo”** 中,我们可以推测这是一个包含LWUIT演示程序的文件。这个程序可能会展示一系列使用...

    eswt j2me ui 教程

    **eSWT (Embedded Standard Widget Toolkit) 是一个专为J2ME(Java 2 Micro Edition)平台设计的用户界面框架,旨在提供更丰富、更接近原生应用的UI体验。** **eSWT 的出现主要源于以下几个原因:** 1. **作为...

    j2me ui lwuit 1.3

    Lightweight User Interface Toolkit (LWUIT) 是一个专门针对 J2ME 平台设计的 UI 框架,它允许开发者创建丰富的、响应迅速且具有吸引力的图形用户界面。 LWUIT 1.3 版本是该框架的一个重要里程碑,它提供了许多...

    lwuit.rar_J2ME ui_LWUIT_j2me

    LWUIT的核心设计理念是模型-视图-控制器(MVC)架构,这是一种软件设计模式,将应用程序的数据模型、用户界面和控制逻辑分离,以提高代码的可维护性和可重用性。在LWUIT中,模型负责管理应用程序的数据和业务逻辑,...

    nokia s60 FP1 J2ME UI develop guide

    本指南旨在帮助开发者理解 S60 平台上 J2ME 应用程序 UI 设计的核心原则和技术细节,确保所开发的应用程序能够提供一致且优质的用户体验。 #### 目标读者 - 面向具有 J2ME 开发经验的软件工程师。 - 针对希望了解或...

    J2ME高级UI编程源码

    在J2ME中,事件处理是UI交互的核心。我们可以监听键盘事件、触摸屏事件,以及按钮点击事件等。通过实现CommandListener接口并覆盖`commandAction(Command c, Displayable d)`方法,我们可以处理用户在界面上的交互...

    J2ME游戏课程设计

    总的来说,J2ME游戏课程设计是一次综合性的学习体验,涵盖了编程、设计、逻辑思维等多个方面。通过"BoxMan"这个游戏,学生可以全面掌握J2ME游戏开发的基本技能,并培养解决问题的能力。在实践中不断探索和优化,将...

    j2me的UI控件包

    Mewt 是一个专为J2ME设计的UI控件库,它提供了一系列轻量级、可自定义皮肤的UI组件,适应于各种不同屏幕尺寸的设备。Mewt 的设计目标是为开发者提供更加灵活、高效的界面设计工具,以便在资源有限的移动设备上创建出...

    J2ME+UI框架LWUIT开发手册

    其中, Lightweight User Interface Toolkit(LWUIT)是Oracle公司推出的一个开源UI框架,用于提升J2ME应用程序的用户界面体验。LWUIT提供了丰富的组件和动画效果,使得开发者能够创建出美观且功能丰富的移动应用。 ...

    J2ME课程设计_贪吃蛇

    在J2ME平台上进行课程设计,可以让我们学习到Java语言的基础、面向对象编程的概念以及移动应用开发的核心技术。这次的课程设计主题是“贪吃蛇”,这是一个经典的休闲游戏,通过简单的规则和操作,吸引了无数玩家。 ...

    j2me最佳实践,UI设计

    综上所述,J2ME应用开发涉及广泛的考量,从资源高效管理到UI设计,再到线程控制和调试优化,每一环节都需要细致规划和精心实施。只有充分理解并运用这些最佳实践,才能确保应用在各种设备上稳定、高效运行,为用户...

    J2ME课程设计样板

    课程设计的核心是开发一个个人通信录应用程序,该应用展示了J2ME在移动设备上的高级用户界面(UI)应用和数据持久化处理。 **设计目的:** 1. 学生将学习如何整合基础和专业知识,掌握设计过程和方法。 2. 理解程序...

    j2me开发框架介绍

    EasyMF 是一个 J2ME 开发框架,目标是设计一个简单、稳定、可快速开发的 J2ME 开发框架。它简化了 UI 设计、RMS 操作、日志框架、联网框架、通用工具设计等多个方面。EasyMF 的功能列表包括 UI 框架、日志框架、RMS ...

    j2me设计

    1. J2ME (Java 2 Micro Edition):J2ME是一个Java平台的子集,专为资源有限的设备如手机和嵌入式系统设计。它由配置(Configurations)和 profiles(Profile)组成,如MIDP(Mobile Information Device Profile)和...

    J2me 轻量级UI控件-lwuit1.2.1

    LWUIT 1.2.1 是该工具包的一个版本,它专注于提供一套强大的、可定制的UI控件,同时尽量减少对设备资源的需求。尽管LWUIT被设计为轻量级,但如描述中提到的,它的大小仍然接近400KB,这在一些内存受限的设备上可能...

    基于J2ME平台的手机游戏贪吃蛇程序的设计与实现

    J2ME是Java的一个版本,专为嵌入式和消费类电子设备设计。 #### 五、J2ME及其体系结构概述 - **J2ME简介**:J2ME是Java的一个版本,专注于资源有限的设备,如手机、PDA等。它由配置(Configuration)和剖面(Profile)...

    J2ME程序设计实例

    创建一个计算器应用涉及使用J2ME的基础UI组件,如TextItem用于输入数字和运算符,ChoiceGroup用于选择运算类型,以及Command对象来处理用户操作。计算逻辑通常会封装在一个单独的类中,处理输入数据并返回结果。 4...

Global site tag (gtag.js) - Google Analytics