将canvas创建高级菜单
来源:技术人生 责任编辑:栏目编辑 发表时间:2013-07-01 07:54 点击:次
看了<<J2me中使用Canvas创建高级菜单>>后,将canvas创建高级菜单归结为两个问题:菜单的绘制和菜单事件的处理.设计了三个类:MenuMidlet,MenuScreen,Menu。
MenuMidlet是主类,该类继承了MIDlet类;
MenuScreen类负责事件处理;
Menu类负责菜单的绘制
MenuMidlet是主类,该类继承了MIDlet类;
MenuScreen类负责事件处理;
Menu类负责菜单的绘制
2.菜单绘制
菜单有两种状态:激活状态和非激活状态.
在激活状态下,显示菜单项,并且可以接受用户的上下选择事件
在非激活状态下,隐藏菜单项,不接受用户的上下选择事件
菜单的绘制包括激活状态下的菜单绘制和非激活状态下的菜单绘制
非激活状态下的菜单绘制包括:左菜单(options)和右菜单(exit)绘制
激活状态下的菜单绘制包括:左菜单(options)和右菜单(cancel)绘制,左菜单项(新建,设定,记录,帮助,关于)绘制。如图:
3.菜单事件处理
Canvas提供了keyPressed(int key)来响应用户的按键 。
Canvas中的gameAction是将手机键盘映射成为游戏动作的机制。
需要响应UP,DOWN,FIRE,左菜单键,右菜单键事件
以下是源代码,在WTK2.5.2下编译通过
菜单有两种状态:激活状态和非激活状态.
在激活状态下,显示菜单项,并且可以接受用户的上下选择事件
在非激活状态下,隐藏菜单项,不接受用户的上下选择事件
菜单的绘制包括激活状态下的菜单绘制和非激活状态下的菜单绘制
非激活状态下的菜单绘制包括:左菜单(options)和右菜单(exit)绘制
激活状态下的菜单绘制包括:左菜单(options)和右菜单(cancel)绘制,左菜单项(新建,设定,记录,帮助,关于)绘制。如图:
3.菜单事件处理
Canvas提供了keyPressed(int key)来响应用户的按键 。
Canvas中的gameAction是将手机键盘映射成为游戏动作的机制。
需要响应UP,DOWN,FIRE,左菜单键,右菜单键事件
以下是源代码,在WTK2.5.2下编译通过
1)MenuMidlet类
Java代码
import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;
import javax.microedition.lcdui.*;
public class MenuMidlet extends MIDlet {
private MenuScreen menuScreen;
Display display;
public MenuMidlet() {
display= Display.getDisplay(this);
menuScreen = new MenuScreen(this);
}
protected void startApp() throws MIDletStateChangeException {
}
protected void pauseApp() {
}
protected void destroyApp(boolean unconditional)
throws MIDletStateChangeException {
}
}
Java代码
import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;
import javax.microedition.lcdui.*;
public class MenuMidlet extends MIDlet {
private MenuScreen menuScreen;
Display display;
public MenuMidlet() {
display= Display.getDisplay(this);
menuScreen = new MenuScreen(this);
}
protected void startApp() throws MIDletStateChangeException {
}
protected void pauseApp() {
}
protected void destroyApp(boolean unconditional)
throws MIDletStateChangeException {
}
}
2)MenuScreen类
Java代码
import javax.microedition.lcdui.*;
import javax.microedition.lcdui.game.GameCanvas;
import javax.microedition.media.*;
public class MenuScreen extends GameCanvas {
static int width; // screen width
static int height; // screen height
private int LEFT_SOFTKEY_CODE = -6;
private int RIGHT_SOFTKEY_CODE = -7;
// Menu Item Labels
static final String[] menuOptions = { "新建", "设置",
"记录", "帮助", "关于" };
static int menuIdx;// 记录是在第几个菜单处按下的确定键。
private int currentlySelectedIndex = 0;
private boolean menuIsActive = false;
private MenuMidlet midlet;
private String leftOption;
private String rightOption;
private Graphics g;
private Menu menu;
// Constructor
public MenuScreen(MenuMidlet midlet) {
super(false);
this.midlet = midlet;
// Get Width and Height of Canvas
width = getWidth();
height = getHeight();
setFullScreenMode(true);
menuIdx = 0;
g = getGraphics();
leftOption = "Options";
rightOption = "Exit";
menu = new Menu(leftOption, rightOption, menuOptions);
start();
midlet.display.setCurrent(this);
}
public void start() {
clearScreen();
menu.drawInactiveMenu(this, g);
}
public void clearScreen() {
g.setColor(0xffffff); // white
g.fillRect(0, 0, width, height);
flushGraphics();
}
protected void keyPressed(int keyCode) {
if (menuIsAct
相关新闻>>
- 发表评论
-
- 最新评论 更多>>