站内搜索: 请输入搜索关键词

当前页面: 开发资料首页J2ME 专题高亮菜单页面中加入退出和确认按键?

高亮菜单页面中加入退出和确认按键?

摘要: 高亮菜单页面中加入退出和确认按键?


我是J2ME新手,困惑我很久的问题怎样才能在高亮菜单页面加退出和确认按键?
我的高亮菜单类是继承Canvas类,菜单是由一个线程控制repaint()函数画出来的,有个keypressed函数控制菜单的选项,也就是说有keypressed函数控制用户选中了哪一项菜单.问题就出来了,我怎么才能在一个画面里同时显示菜单和退出,确认键?因为退出和确认键由commandAction()控制,菜单的选项是由keypressed()控制,这样不能控制菜单选择和commandAction了? 有没有大侠帮我解决一下.
import javax.microedition.lcdui.*;
import javax.microedition.media.*;

public class MenuScreen extends Canvas implements Runnable,CommandListener{

// Set Fonts
static final Font lowFont = Font.getFont(Font.FACE_MONOSPACE,Font.STYLE_PLAIN, Font.SIZE_MEDIUM);
static final Font highFont = Font.getFont(Font.FACE_MONOSPACE,Font.STYLE_BOLD, Font.SIZE_LARGE);
// Set Color
static final int lowColor = 0x000000FF; // Not Highlighted
static final int highColor = 0x00FF0000; // Highlighted
static final int highBGColor = 0x00CCCCCC;// Highlighted Background
static int width; // screen width
static int height; // screen height
static int startHeight; // height where the menu starts
static final int spacing = highFont.getHeight() / 2; // spacing between menu
// items
// Menu Item Labels
static final String[] mainMenu = { "New Game", "Settings","High Score","Help", "About" };
// To hold the current highlighted menu option
static int menuIdx;//记录是在第几个菜单处按下的确定键。
// Menu Thread
Thread menuThread;
private Eliminator midlet;
private Command cmExit;
private Command cmPlay;
public Form fmMain;

// Constructor
public MenuScreen(Eliminator midlet) {//Eliminator继承MIDlet
this.midlet=midlet;
fmMain=new Form("Menu");
// Get Width and Height of Canvas
width = getWidth();
height = getHeight();
// Calculate Start Height of Menu
startHeight = (highFont.getHeight() * mainMenu.length)+ ((mainMenu.length - 1) * spacing);
startHeight = (height - startHeight) / 2;//菜单上下两端的空白一样多
System.out.println("mainMenu.length: "+mainMenu.length+"startHeight"+startHeight);
// Set Selected Menu Item to the first menu item
menuIdx = 0;

Command cmExit=new Command("Exit3",Command.EXIT,1);
Command cmPlay=new Command("Play3",Command.OK,1);

fmMain.addCommand(cmExit);
fmMain.addCommand(cmPlay);

fmMain.setCommandListener(this);

menuThread = new Thread(this);
menuThread.start();

midlet.display.setCurrent(fmMain);

}
// Simple Run -- Should be modified for better performance/efficiency

public void run() {
while (true) {
repaint();
}
}

//此画图程序块一直运行 知道有按键中断

// Paint Main Menu
public void paint(Graphics g) {目的就是画菜单,使被选中的菜单高亮}

public void commandAction(Command c, Displayable s) {

if(c.getCommandType() == Command.EXIT)
{

midlet.exitMIDlet();//退出的目的
}
else if(c.getCommandType() == Command.OK)
processMenu();
}
protected void keyPressed(int code){
if (getGameAction(code) == Canvas.UP && menuIdx - 1 >= 0) {
menuIdx--;
} else if (getGameAction(code) == Canvas.DOWN&& menuIdx + 1 < mainMenu.length) {
menuIdx++;
}
}

private void processMenu() {
switch(menuIdx){ }
}
}



其实楼主只需要差一点就OK了,每个键按下时都会产生一个键值,我们可以用个标志位记录下来,它是否被按下。而在你的菜单函数中,你就可以不停检测你的标志位。如果按下了某个健(比如OK键,UP或是DOWN键)那么processMenu().完全没有必用commandAction和keypressed 来分别处理。

至于画,可以每贴完全重绘,也可以有按键响应(需要改变高亮显示条目),再完全重绘,当然也可局部刷新~~~


谢谢我再试试!


上面的程序还有个问题,我在设置显示的时候是midlet.display.setCurrent(fmMain); 显示的时候就只有Menu,Exit和Play,三个东西.它们由这三个函数产生
fmMain=new Form("Menu");fmMain.addCommand(cmExit);fmMain.addCommand(cmPlay);
但是菜单选项一个都没出来,屏幕中是一片空白,也就是说生成菜单的代码没运行,具体代码menuThread = new Thread(this);menuThread.start();好象是没起作用,本来是用这个线程画菜单的,结果它没运行,不知道怎么回事? 现在只显示了Menu,Exit和Play,菜单没显示出来,生成菜单的代码是没有问题,我猜主要是调用生成菜单的代码的调用部分可能有问题,请大侠帮个忙解决下.

cxc014(有心插柳柳不活,无心栽花花开花?) 可以留个联系方式吗?很想探讨一下J2ME方面的问题?



各位大侠都显显身吧?在线等,可以留个联系方式也好,日后交流.我的QQ 123128092 MSN:tlongya@hotmail.com


midlet.display.setCurrent(fmMain);中已把当前的显示屏设置为fmMain因此,你的菜单必须画在fmMain上才行,否则是不能显示的。


cxc014(有心插柳柳不活,无心栽花花开花?) 真是好心人.

要怎么样才能把菜单画在fmMain(Form)上呢? 可以提示个线索吗 ? 还有就是怎么结贴,我怕不结贴 被人骂.谢谢大哥了,如此耐心的回我贴.


谢谢你的褒奖:)
由于fmMain是个Form你可以用public int append(String str) 或是public void insert(int itemNum,Item item)方法来画,具体请参考WTK的API文档。
但我个人建议最好不要用Item来画,最好能用图片直接画在Canvas上就好。毕竟菜单作为游戏的门户,越是漂亮越好。

还有就是怎么结贴
=========================
点右上角的“管理”。
具体参考“社区功能”==》“社区规则”等。


太感谢cxc014(有心插柳柳不活,无心栽花花开花?)这位大哥了


↑返回目录
前一篇: 请问怎么结贴?? 不好意思 连这个问题都问大家!
后一篇: 问个弱弱的问题!