高级UI提供了一个Alert的控件可以有弹出对话框的效果。但是大家想不想自己实现一个呢。想不想知道sun是如何让Alert工作的呢?好请看下文
设计思想是。建立一个 abstract class Dialog extends Canvas。下面的事情就让我们一步步花出来吧。
实现理念是先绘制整个Canvas然后通过图形Graphics描绘成透明,接着在整个屏幕的中间去出一块区域来,至于上面你要做什么那就是你的事情了。哈。
好看代码,
java 代码
-
-
-
-
-
- package org.pook.ui.form;
-
- import java.util.TimerTask;
-
- import javax.microedition.lcdui.Canvas;
- import javax.microedition.lcdui.Display;
- import javax.microedition.lcdui.Font;
- import javax.microedition.lcdui.Graphics;
-
- import org.pook.log.Log;
- import org.pook.ui.Command;
- import org.pook.ui.SoftButton;
- import org.pook.ui.core.Platform;
- import org.pook.ui.event.CommandListener;
- import org.pook.ui.timer.TimerTaskManager;
-
-
-
-
-
-
-
-
-
-
-
-
- public abstract class Dialog extends Canvas implements Runnable {
- private static Log log = Log.getLog("Dialog");
-
- 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];
-
-
- public static final int DIALOG_OK = 0;
-
-
- public static final int DIALOG_CANCEL = 2;
-
-
- public static final int DIALOG_YES_NO = 3;
-
-
- public static final int DIALOG_OK_CANCEL = 4;
-
-
- public static final int DIALOG_YES_NO_CANCEL = 5;
-
- public static final int DIALOG_TEXT = 6;
-
-
-
-
- protected Panel parent;
-
- protected boolean hasFocus;
-
-
-
-
- long timeOut;
-
-
-
-
- int type;
-
-
- protected String title;
-
-
-
-
- protected String[] rowTitle;
-
- protected int bgColor;
-
- protected int fontColor;
-
- protected Font font = Font.getDefaultFont();
-
-
- protected TimerTask task;
-
- protected Display display;
-
- protected SoftButton softButton;
-
-
-
-
-
-
-
-
-
-
-
- public Dialog(String title, Panel parent, Display display) {
- this(title, parent, display, 3000);
- }
-
-
-
-
-
-
-
-
- public Dialog(String title, Panel parent, Display display, long timeOut) {
- this(title, parent, display, Dialog.DIALOG_OK, timeOut);
- }
-
-
-
-
-
-
-
-
-
- public Dialog(String title, Panel parent, Display display, int type,
- long timeOut) {
- setFullScreenMode(true);
-
- this.parent = parent;
- checkParent();
-
- this.timeOut = timeOut;
- this.type = type;
- this.title = title;
- this.display = display;
-
- softButton = new SoftButton();
-
-
-
- if (timeOut != 0)
- task = TimerTaskManager.getInstace().add(this, timeOut);
-
-
- setStyle(0x0033FF, 0xFFFFFF);
-
- }
-
- public void setStyle(int bgColor, int fontColor) {
- this.bgColor = bgColor;
- this.fontColor = fontColor;
- }
-
- public void cancel() {
-
- if (parent == null)
- throw new NullPointerException("Parent is not Null.");
-
- task.cancel();
- if(parent == null)
- return;
-
- display.setCurrent(parent);
-
- }
-
- public void addCommand(Command cmd) {
- this.softButton.addCommand(cmd);
- }
-
- public void setSoftButtonListener(CommandListener cml) {
- this.softButton.setCommandListener(cml);
- }
-
- public void setSoftButtonStyle(int bgColor, int fontColor){
- this.softButton.setStyle(bgColor, fontColor);
- }
-
- public void run() {
- cancel();
-
- }
-
-
- public void drawRGB(Graphics g) {
- int ai[] = new int[Platform.WIDTH];
- for (int j1 = 0; j1 < ai.length; j1++)
- ai[j1] = 0x90000000;
- g.drawRGB(ai, 0, 0, 0, 0, Platform.WIDTH, Platform.HEIGHT, true);
- }
-
-
-
-
-
- private void checkParent() {
- if (parent == null){
- throw new NullPointerException("Parent is not null");
- }
-
- }
-
- protected void keyPressed(int keyCode) {
- softButton.onClick(keyCode);
-
- }
-
- public void setPanel(Panel panel) {
- this.parent = panel;
-
- }
-
- public void setTimeOut(long timeOut) {
- this.timeOut = timeOut;
- }
-
- public int getType() {
- return type;
- }
-
- public void setType(int type) {
- this.type = type;
- }
- }
下面这段是弹出一个对话框实现
java 代码
-
-
-
-
-
- package org.pook.ui.form;
-
- import java.util.Vector;
-
- import javax.microedition.lcdui.Font;
- import javax.microedition.lcdui.Graphics;
-
- import org.pook.Pook;
- import org.pook.log.Log;
- import org.pook.ui.Command;
- import org.pook.ui.SelectedPart;
- import org.pook.ui.core.Platform;
- import org.pook.ui.event.CommandListener;
- import org.pook.ui.util.FontUtil;
- import org.pook.ui.util.GraphicsUtil;
- import org.pook.util.StringUtil;
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- public class MessageDialog extends TextDialog implements CommandListener{
- private static Log log = Log.getLog("MessageDialog");
-
-
- private Command ok;
-
- private SelectedPart plan;
- private int planHeight;
-
- private int contentHeight;
-
- private int viewSize;
- private int space;
-
-
- private Vector content;
- private int selectIndex;
- private int contentY;
-
- public MessageDialog(String _title,String _message, long _timeOut) {
- super(_title, Pook.MAINMENU, Pook.getDisplay(), _timeOut);
- ok = new Command("确定",Command.LEFT, Command.FIRST_PRIORITY);
- this.addCommand(ok);
- this.setSoftButtonListener(this);
- this.setMessage(_message);
- initView();
- this.setStyle(0x001D68, 0xFFFFFF);
- this.setSoftButtonStyle(0x0071BD,0xFFFFFF);
- this.setType(Dialog.DIALOG_OK);
- }
-
- public void setMessage(String message){
-
- skipMessage(message);
- }
-
-
- private void skipMessage(String message) {
-
- if(message == null)
- return ;
-
- content = new Vector();
- String[] text = StringUtil.split(message, "\n");
-
- for(int j =0; j < text.length; j++){
-
- String[] t = FontUtil.splitOnlyStringToRowString(font,text[j],view[WIDTH]-6);
- for(int i=0; i
- content.addElement(t[i]);
- }
-
- }
-
-
-
-
-
-
-
-
-
- }
-
- protected void keyPressed(int keyCode) {
- super.keyPressed(keyCode);
- this.thisUpAndDown(keyCode);
- this.repaint();
- }
-
-
-
-
-
-
- private void thisUpAndDown(int keyCode) {
-
- if (this.content == null)
- return;
-
- if(this.content.size() < this.viewSize)
- return;
-
- switch (keyCode) {
-
- case Platform.KEY_UP: {
-
- selectIndex = selectIndex <= 0 ? content.size() - viewSize - 1
- : --selectIndex;
-
- break;
-
- }
- case Platform.KEY_DOWN: {
- selectIndex = selectIndex >=content.size() - viewSize - 1 ? 0
- : ++selectIndex;
-
-
- break;
- }
- }
- }
-
-
- public void commandAction(Command cmd) {
- if(cmd == ok)
- this.cancel();
-
- }
- protected void paint(Graphics g) {
- parent.paint(g);
- drawRGB(g);
- this.softButton.paint(g);
- this.paintMessageDialog(g);
-
- }
-
-
-
- private void paintMessageDialog(Graphics g) {
- initView();
- g.setFont(font);
- GraphicsUtil.drawRectWithColor(g,0xFFD84F, view[X]-1,view[Y]-1,view[WIDTH]+1,view[HEIGHT]+1);
- paintTitleImpl(g);
- paintContent(g);
- paintState(g);
- }
-
- private void paintTitleImpl(Graphics g) {
- g.setColor(0x0071BC);
- g.fillRect(view[X],view[Y],view[WIDTH],font.getHeight() + 2);
- g.setColor(0xFFFFFF);
- g.drawString(title, view[X] + 4, view[Y] + 1,Graphics.TOP|Graphics.LEFT);
- }
-
- private void paintContent(Graphics g) {
- if(content.size() > viewSize ){
- this.plan = new SelectedPart();
- plan.setStyle(0xFFFFFF, 0x000000);
- this.planHeight = contentHeight/(content.size() - viewSize);
- }
- contentY = view[Y] + font.getHeight() + 4;
-
- g.setColor(0x001D68);
- g.fillRect(view[X],contentY,view[WIDTH],contentHeight);
-
- paintContentImpl(g);
-
- }
-
- private void paintContentImpl(Graphics g) {
- if(content == null)
- return ;
-
- int size = viewSize>content.size()?content.size():viewSize + selectIndex;
-
- g.setColor(0xFFFFFF);
-
- for(int i = selectIndex; i
- g.drawString((String) content.elementAt(i),view[X] + 2, contentY + space * (i-selectIndex), Graphics.TOP|Graphics.LEFT);
- }
-
-
-
-
- if(plan != null){
-
- plan.changePosition(view[WIDTH] + 4 , contentY + this.planHeight *selectIndex, 4,this.planHeight);
- plan.paint(g);
- }
- }
-
- private void paintState(Graphics g) {
- int height = Platform.HEIGHT - 30 - font.getHeight() - 2;
- g.setColor(0x0071BC);
- g.fillRect(view[X], height ,view[WIDTH],font.getHeight() + 2);
- g.setColor(0xFFFFFF);
- g.drawLine(view[X],height,view[WIDTH] + 10, height);
- g.setColor(0xFFFFFF)
- 大小: 25.5 KB
分享到:
相关推荐
基于低级界面的j2me UI库类,有demo和源码。高级界面的东西虽然好用但是在不同的手机上面显示得不一样,有的好看有的很丑,但是基于低级界面的就不一样了。在不同手机上显示出来都是一样的,这个UI库类是企业级的。...
MIE J2ME UI库 v1.0 说明: MIE UI库(下简称MIE)是一个开源的手机(J2ME)GUI编程框架,与PC电脑上的AWT/Swing/SWT有相似的用处。 MIE提供了一套基本的UI组件,包括文本标签、文本框、文本域、按钮、单选框、复选框...
在J2ME中,UI(用户界面)的设计和实现对于提供良好的用户体验至关重要。本文将深入探讨J2ME中的高级UI设计技巧、框架和实践。 一、触摸屏操作 在现代移动设备中,触摸屏已经成为主流的交互方式。在J2ME中处理触摸...
**标签“LWUIT j2me UI例子 制作漂亮的UI例子”** 强调了LWUIT在J2ME平台上的应用以及创建美观界面的重要性。这些标签可能关联着一个项目或教程,旨在帮助开发者学习和掌握LWUIT的UI设计技巧。 在**压缩包子文件的...
**eSWT (Embedded Standard Widget Toolkit) 是一个专为J2ME(Java 2 Micro Edition)平台设计的用户界面框架,旨在提供更丰富、更接近原生应用的UI体验。** **eSWT 的出现主要源于以下几个原因:** 1. **作为...
Lightweight User Interface Toolkit (LWUIT) 是一个专门针对 J2ME 平台设计的 UI 框架,它允许开发者创建丰富的、响应迅速且具有吸引力的图形用户界面。 LWUIT 1.3 版本是该框架的一个重要里程碑,它提供了许多...
总的来说,LWUIT是J2ME开发中不可或缺的工具,它极大地提高了UI开发的效率和质量。通过熟练掌握LWUIT,开发者能够为Java ME平台创建出具备高级UI特性的移动应用,吸引更多的用户,并提升应用的整体品质。而文档中的...
通过上述内容可以看出,《诺基亚 S60 FP1 J2ME UI 开发指南》为开发者提供了全面而深入的技术指导,有助于他们更好地理解和掌握 S60 平台上 J2ME 应用程序 UI 设计的关键要素,进而开发出既符合技术规范又满足用户...
**J2ME高级UI编程源码详解** J2ME(Java 2 Micro Edition)是Java平台...通过深入研究"Example02"源码,开发者不仅可以学习到J2ME UI设计的基本原理,还能掌握高级UI编程技巧,从而提升自身在移动设备应用开发的能力。
Mewt 是一个专为J2ME设计的UI控件库,它提供了一系列轻量级、可自定义皮肤的UI组件,适应于各种不同屏幕尺寸的设备。Mewt 的设计目标是为开发者提供更加灵活、高效的界面设计工具,以便在资源有限的移动设备上创建出...
**J2ME+UI框架LWUIT开发手册** 在移动设备技术发展早期,Java 2 Micro Edition(J2ME)是开发嵌入式系统和...但LWUIT对于理解移动UI设计和交互仍有一定的参考价值,尤其是对于那些仍然需要维护J2ME应用的开发者来说。
lwuit开发文档,英文的,勉强看得下去,chem格式很受欢迎
### J2ME最佳实践与UI设计关键知识点 #### 一、J2ME概述与MIDP版本 J2ME(Java 2 Micro Edition),由Sun Microsystems发布,是为小型设备和消费类电子产品设计的Java平台标准。其核心是MIDP(Mobile Information ...
**J2ME游戏课程设计详解** Java 2 Micro Edition(J2ME)是Java平台的一个子集,专门用于开发在移动设备、嵌入式系统等资源有限的环境中运行的应用程序,其中包括游戏。J2ME游戏课程设计是学习移动游戏开发的重要...
**J2ME课程设计——贪吃蛇** J2ME(Java Micro Edition)是Java平台的一个重要分支,主要用于嵌入式设备和移动设备的开发,如早期的智能手机和平板电脑。在J2ME平台上进行课程设计,可以让我们学习到Java语言的基础...
**J2ME轻量级UI控件:LWUIT 1.2.1** Java Micro Edition(J2ME)是一种适用于小型设备和嵌入式系统的Java平台,它为开发移动应用提供了基础。在J2ME中,用户界面的构建通常是一项挑战,因为它需要在资源有限的设备...
课程设计的核心是开发一个个人通信录应用程序,该应用展示了J2ME在移动设备上的高级用户界面(UI)应用和数据持久化处理。 **设计目的:** 1. 学生将学习如何整合基础和专业知识,掌握设计过程和方法。 2. 理解程序...
EasyMF 是一个 J2ME 开发框架,目标是设计一个简单、稳定、可快速开发的 J2ME 开发框架。它简化了 UI 设计、RMS 操作、日志框架、联网框架、通用工具设计等多个方面。EasyMF 的功能列表包括 UI 框架、日志框架、RMS ...
本文将详细介绍如何在J2ME低级用户界面(UI)中实现文字的分行功能,并提供一个实用的函数示例。 首先,我们要理解的是,文字分行的核心在于找到合适的位置将字符串分割为多个适合指定宽度的子字符串。在给定的代码...