在LCDUI的架构中,画面上同一时间只能有一个Displayable对象,导致MIDP程序设计中,界面的流程跳转设计比较麻烦,本模式能解决此问题:
考虑以下几个界面的程序:
1. 帮助说明
每个帮助说明的界面风格一致,只是说明文字不同,用Form实现。
2. 版权声明
给出系统的版权信息,用Alert实现,在一个游戏中最好只有一个,降低系统内存。
3. 主界面
用List的IMPLICIT实现,为了降低内存使用,在系统中也只存在一个。
4. 设置界面
用Form实现。
5. 游戏界面
用Canvas实现比较好。如果是其他应用也可以用Form来实现。
6. 启动界面
只是在系统开始时用到,用Alert实现。
代码设计实现如下:
package example.midletsuite;
import javax.microedition.lcdui.*;
import javax.microedition.midlet.*;
import java.util.*;
public class FlowControl extends MIDlet{
boolean init = true;
public FlowControl(){
Navigator.display = Display.getDisplay(this);
Navigator.midlet = this;
}
protected void startApp(){
Navigator.current = Navigator.MAIN_SCREEN;
Navigator.show(null);
if(init){
Alert splash = new Alert("启动画面");
splash.setType(AlertType.CONFIRMATION);
splash.setTimeout(5000);
Navigator.display.setCurrent(splash);
init = false;
}
}
protected void pauseApp(){}
protected void destroyApp(boolean u){}
}
class Navigator{
final public static int MAIN_SCREEN = 1;
final public static int GAME_SCREEN = 2;
final public static int SET_SCREEN = 3;
final public static int SET_HELP_SCREEN = 4;
final public static int GAME_HELP_SCREEN = 5;
public static MIDlet midlet;
public static Display display;
public static int current = 1;
public static void show(Object obj){
switch(current){
case MAIN_SCREEN:
display.setCurrent(MainScreen.getInstance());
break;
case GAME_SCREEN:
display.setCurrent(GameScreen.getInstance());
break;
case SET_SCREEN:
display.setCurrent(SetScreen.getInstance());
break;
case SET_HELP_SCREEN:
display.setCurrent(new HelpScreen((String)obj));
break;
case GAME_HELP_SCREEN:
display.setCurrent(new HelpScreen((String)obj));
break;
}
}
public static void flow(String cmd){
switch(current){
case MAIN_SCREEN:
if(cmd.equals("开始")){
current = GAME_SCREEN;
show(null);
}else if(cmd.equals("设置")){
current = SET_SCREEN;
show(null);
}else if(cmd.equals("版权声明")){
display.setCurrent(CopyrightScreen.getInstance());
show(null);
}else if(cmd.equals("离开")){
midlet.notifyDestroyed();
}
break;
case GAME_SCREEN:
if(cmd.equals("规则介绍")){
current = GAME_HELP_SCREEN;
show("游戏规则介绍");
}else if(cmd.equals("返回")){
current = MAIN_SCREEN;
show(null);
}
break;
case SET_SCREEN:
if(cmd.equals("设置说明")){
current = SET_HELP_SCREEN;
show("设置方式");
}else if(cmd.equals("返回")){
current = MAIN_SCREEN;
show(null);
}
break;
case GAME_HELP_SCREEN:
if(cmd.equals("返回")){
current = GAME_SCREEN;
show(null);
}
break;
case SET_HELP_SCREEN:
if(cmd.equals("返回")){
current = SET_SCREEN;
show(null);
}
break;
}
}
}
//帮助说明界面 Singleton模式
class HelpScreen extends Form implements CommandListener{
public HelpScreen(String c){
super("帮助说明");
append(c);
addCommand(new Command("返回",Command.OK,1));
setCommandListener(this);
}
public void commandAction(Command c,Displayable d){
Navigator.flow(c.getLabel());
}
}
//版权界面 Singleton模式
class CopyrightScreen extends Alert{
private static Displayable instance;
synchronized public static Displayable getInstance(){
if(instance == null){
instance = new CopyrightScreen();
}
return instance;
}
private CopyrightScreen(){
super("版权声明");
setString("此应用程序之版权归NIIT教研室所有");
setType(AlertType.INFO);
setTimeout(Alert.FOREVER);
}
}
//主界面 Singleton模式
class MainScreen extends List implements CommandListener{
private static Displayable instance;
synchronized public static Displayable getInstance(){
if(instance == null){
instance = new MainScreen();
}
return instance;
}
private MainScreen(){
super("主菜单",List.IMPLICIT);
append("开始",null);
append("设置",null);
append("版权声明",null);
append("离开",null);
setCommandListener(this);
}
public void commandAction(Command c,Displayable d){
String cmd = getString(getSelectedIndex());
Navigator.flow(cmd);
}
}
//设置主界面 Singleton模式
class SetScreen extends Form implements CommandListener{
private static Displayable instance;
TextField url = null;
Gauge volume = null;
synchronized public static Displayable getInstance(){
if(instance == null){
instance = new SetScreen();
}
return instance;
}
private SetScreen(){
super("设置");
url = new TextField("请输入服务器的设置","socket://127.0.0.1:99",40,TextField.URL);
append(url);
volume = new Gauge("音量",true,10,3);
append(volume);
addCommand(new Command("设置说明",Command.HELP,1));
addCommand(new Command("返回",Command.BACK,1));
setCommandListener(this);
}
public void commandAction(Command c,Displayable d){
Navigator.flow(c.getLabel());
}
}
//游戏主界面 Singleton模式
class GameScreen extends Form implements CommandListener{
private static Displayable instance;
TextField url = null;
Gauge volume = null;
synchronized public static Displayable getInstance(){
if(instance == null){
instance = new GameScreen();
}
return instance;
}
private GameScreen(){
super("游戏");
addCommand(new Command("规则介绍",Command.HELP,1));
addCommand(new Command("返回",Command.BACK,1));
setCommandListener(this);
}
public void commandAction(Command c,Displayable d){
Navigator.flow(c.getLabel());
}
}
【责任编辑 孙杰】
分享到:
相关推荐
综上所述,随着硬件性能的不断提升和软件复杂度的增加,MVC模式在J2ME应用程序设计中的应用变得愈发重要。通过合理设计和实施,可以有效解决传统J2ME应用程序面临的诸多挑战,从而开发出更加健壮、可维护的应用程序...
在项目中,你可以通过“源”或“设计”模式编写MIDlet(J2ME应用程序的核心组件)。NetBeans的代码提示和自动完成功能可以帮助快速编写代码。例如,你可以创建一个简单的“Hello, World!”应用程序,定义一个MIDlet...
以下是一个简单的J2ME程序中MVC模型的设计实例: ```java class MyFrame extends Frame { private Model model; private StringItem name; public MyFrame(Model model) { this.model = model; name = new ...
**J2ME贪吃蛇源程序 - 面向对象设计思想** J2ME(Java Micro Edition)是一种轻量级的Java平台,主要用于移动设备和嵌入式系统。在这个平台上开发游戏,如“贪吃蛇”,是学习Java编程和理解面向对象设计思想的良好...
J2ME是Java平台的一个子集,专为资源有限的设备如手机和平板电脑设计,使其能够在这些平台上运行游戏和其他应用程序。 此Demo的核心技术包括地图绘制、人物移动、碰撞检测以及界面交互。地图绘制在J2ME中通常使用二...
通过这个J2ME手机选择题程序,初学者可以深入理解J2ME开发流程,学习如何创建用户界面,处理数据,以及在有限资源的环境中优化代码。同时,也可以锻炼解决问题和调试应用的能力。随着技术的发展,虽然现在更多的移动...
"j2me_android_sdk1.16"便为此目的提供了一个解决方案,它是一个专为Android设计的SDK,允许开发者将J2ME程序移植到Android系统,从而拓宽了应用的受众范围。 该SDK的主要功能在于封装了J2ME API,使得开发者能够...
4. **程序逻辑**:深入理解测试逻辑,学习如何编写条件判断和控制流程。 5. **错误处理**:学习如何添加异常处理,提高程序的健壮性。 6. **优化**:分析源码,寻找可能的性能瓶颈,尝试优化代码,使其在有限的...
MVC(Model-View-Controller)模式是一种广泛应用于软件工程的设计模式,特别是在用户界面开发中。MVC模式的核心在于将应用程序的不同关注点分离,以便于管理复杂的应用逻辑。这种模式通过将程序分解为三个核心组成...
2. 手机游戏J2ME毕业设计.doc:这是一个文档文件,很可能包含了游戏的设计概念、功能描述、实现技术以及可能的游戏流程图或类结构图。通过这份文档,我们可以深入理解开发者是如何构思并实现这个游戏的,包括所采用...
开发者需熟悉J2ME的MIDP和Game API,利用Canvas和Graphics类创建游戏画面,使用Timer类控制游戏逻辑,通过MIDlet作为应用程序的入口点。 #### 3. 测试阶段 测试阶段确保游戏在多种设备上运行正常,包括不同分辨率的...
- **MIDP(Mobile Information Device Profile)**: 是J2ME中最常见的一种Profile,包含了用户界面组件、网络访问和存储等功能,用于开发手机应用程序。 2. **游戏开发框架** - **MIDlet**: J2ME中的应用程序通常...
在Java ME(J2ME)平台上开发游戏时,"j2me主程序与脚本分离"是一种常见的设计模式,旨在提高代码的可维护性和灵活性。这种模式允许将游戏的主要逻辑(主程序)与动态可更新的逻辑部分(脚本)进行拆分,使得开发者...
J2ME主要应用于消费电子产品,特别是手机,它通过“一次编写,到处运行”的Java特性,简化了跨平台应用程序的开发流程,提升了开发效率。手机游戏作为移动设备增值服务的重要组成部分,借助Java技术,为用户提供了...
Java 2 Micro Edition(J2ME)是一种专为嵌入式设备和移动设备设计的Java平台,它允许开发者创建在各种小型设备上运行的应用程序,包括手机、智能手表、家用电器等。"是男人就撑20秒"这个游戏是利用J2ME技术开发的一...
1. 用户界面(UI)设计:J2ME使用 MIDP (Mobile Information Device Profile) 提供的用户界面组件,如 LCDUI(Limited Connected Device Configuration User Interface)来创建游戏界面,如菜单、按钮和文本显示。...
通过对"box_j2me.rar"的源代码深入研究,我们可以学习到J2ME游戏开发的基本流程、设计模式以及如何在有限的资源环境下实现复杂的游戏逻辑。这对于希望涉足移动游戏开发的程序员来说,是一份宝贵的实践资料。
在移动设备的早期时代,J2ME(Java 2 Micro Edition)是开发移动应用程序的主流平台,尤其在手机游戏领域,J2ME更是占据了一席之地。其中,贪吃蛇游戏作为经典的小型游戏,深受用户喜爱,也是许多初学者入门J2ME开发...
基于J2ME的手机游戏开发模式,是早期移动游戏开发中的一个重要领域,它标志着移动设备上的游戏开发开始从简单的文本和图形界面转向更为复杂、功能丰富的应用。J2ME(Java 2 Micro Edition)是Sun Microsystems为...
J2ME是Java技术的一个分支,专门用于开发移动设备和嵌入式系统的应用程序,特别是在2G和3G手机时代,J2ME在手机游戏领域占据了重要的地位。 在该项目中,首先会介绍J2ME的基础知识,包括其架构、主要组件以及开发...