用Canvas制作一个简单的操作菜单

这篇博客介绍了如何在J2ME中使用Canvas而非List来创建一个更具吸引力的操作菜单。通过自定义的ListCanvas类,作者展示了如何绘制菜单项并实现焦点跟踪,以及通过键盘事件处理上下选择和菜单响应。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

无论是应用程序还是游戏,有一个漂亮的操作菜单能为你的作品增加魅力。最近在学习J2ME的时候发现J2ME中用List做出来的菜单不是很满意,呵呵! 想到Canvas/*
 * ListCanvasMidlet.java
 *
 * Created on 2006年4月27日, 下午8:34
 */

import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;

/**
 *
 * @author  jack
 * @version
 */
public class ListCanvasMidlet extends MIDlet implements CommandListener {
    private static ListCanvasMidlet instance;
    private Display display;
    private  ListCanvas listCanvas;
    public ListCanvasMidlet ()
    {
        instance=this;
        display=Display.getDisplay(this);
        listCanvas=new ListCanvas();
        listCanvas.setCommandListener(this);
            // Add the Exit command
           listCanvas.addCommand(new Command("Exit", Command.EXIT, 1));
           listCanvas.addCommand(new Command("OK", Command.OK, 1));
    }
    public void startApp() {
        display.setCurrent(listCanvas);
    }
   
    public void pauseApp() {
    }
    public void destroyApp(boolean unconditional) {
       
    }
     public static void quitApp() {
    instance.destroyApp(true);
    instance.notifyDestroyed();
    instance = null;
  }
     public void commandAction(Command c, Displayable displayable) {
        if(c.getCommandType()==Command.EXIT)
        {
            this.quitApp();
        }
        else if(c.getCommandType()==Command.OK)
        {
            //回应选项信息
         
            String message="选择了第"+listCanvas.selectEnm+"个选项";
            Alert a = new Alert("", message, null, AlertType.INFO);
            display.setCurrent(a);
        }
    }
}
/*
 * ListCanvas.java
 *
 * Created on 2006年4月27日, 下午8:34
 */

import javax.microedition.lcdui.*;
/**
 *
 * @author  欧建林
 * @version
 */
public class ListCanvas extends Canvas {
    /**
     * constructor
     */
    public int selectEnm=1;//焦点跟踪ID
    public ListCanvas() {
      
    }
   
    /**
     * paint
     */
    public void paint(Graphics g) {
        int width=this.getWidth();
        int height=this.getHeight();
        g.setColor(0x00000);
        g.fillRect(0, 0,width, height);
       // g.drawString("Sample Text",0,0,Graphics.TOP|Graphics.LEFT);
        for(int i=1;i<6;i++)
        {
            if(i==this.selectEnm)
            {
                g.setColor(0xff0000);
            }
            else
            {
                g.setColor(0xffffff);
            }
            g.fillRoundRect(width/10, 20+i*40, (width/10)*8, 30, 15, 15);
            g.setColor(0x00000);
            g.drawString("第"+i+"个选项",width/2,20+i*40,Graphics.TOP|Graphics.HCENTER);
           
        }
       
       
    }
   
    /**
     * Called when a key is pressed.
     */
    protected  void keyPressed(int keyCode) {
        int keyState=this.getGameAction(keyCode);
        if(keyState==this.DOWN)
        {
            this.selectEnm++;
            if(this.selectEnm>5)this.selectEnm=1;
            repaint();
        }
        if(keyState==this.UP)
        {
            this.selectEnm--;
            if(this.selectEnm<1)this.selectEnm=5;
            repaint();
        }
    }
  
   
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值