打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
自己画J2ME的菜单——自定义实现带菜单栏的Form
发现 j2me 提供的command在不同的终端上显示的风格完全不一样了。而且不支持2级或者以上的菜单(至少我没有发现~)。

突发奇想,为什么不自己做个框架呢,像EVC那样,Windows就是好啊,开发啥都方便,那菜单真好。~

Windows的菜单那个“影子效果“不错,其实就是先画一个带边界线的矩形,然后在右边画一个竖线,下边画一个横线,颜色调好,坐标调好。看起来就像立体感觉了。~~

然后就学着windows的效果来画吧。反正J2ME提供了一个比较低级的UI类Canvas(对于我这样的莱乌这能用低级类库啦),多亏刚入门java的时候学习了半年多的swing啊,也做过几个关于swing的项目,对于java 画图还是比较熟悉的哈。

说正题吧,想法呢,就是把屏幕分成三个部门。顶端标题栏(Header),低端菜单部分(MenuBar),中间工作区是留给子类去画的。菜单的使用呢,只要你继承这个类就可以了。然后像使用Swing那样,一个对象一个对象的往里面扔吧。你写你的程序,让他自己去画吧。

抽象类要完成对菜单的控制,以及工作区的重画和保存。

经过3天的业余时间终于搞定了。

我认为手机的菜单最多分两级就足够了,而且菜单项不会超过8个。这个是我的假设哈,理论上可以无线分级的啊。

有了这个菜单框架,如果需要自己绘图,那就专心绘图吧,不用关系菜单啥的处理了。。。

目前是预览版本,在我的手机上和模拟器上都测试通过,但是没有对手写机器的支持,下一步找一个手写机器来测试。

还有打算在工作区加上一个滚动条。实现滚动效果。。。目前只支持全屏下的显示。

将来在这个基础上开发一个Table,List,,Calendar....等等。。嘿嘿,等待你一起来开发啊。。。



说了半天了,都是文字累了吧。看看截图吧。。。


(图一):启动界面,我特意加上了icon,按照Windows CE的习惯 菜单在右侧,当然,也可以通过设置布局来调整哦。




(图二点一下右键,菜单就展开了,这个菜单眼悉吧~)



(图三:点ok键或者右键,就展开了2级菜单)




(图四:选择2级菜单的某项后点了确认键,触发了我注册的事件)


(图五:来玩玩用这个工具开发的拼图游戏吧,去掉了那些ICON)




(图六:查看排行榜)




看看是如何使用这个工具的呢~

看看拼图的程序的核心代码~~


 private Header header = null;

 private MenuBar menuBar = null;

 private Menu mainMenu = null;

 private MenuItem startItem = null;

 private MenuItem saveItem = null;

 private MenuItem topItem = null;

 private Component label = null;

构造函数中初始化:

header = new Header("拼图游戏");
  header.setBackground(0xEFEFEF);
  header.setHeight(30);
  menuBar = new MenuBar();
  mainMenu = new Menu("菜单");
  startItem = new MenuItem("开始游戏");
  saveItem = new MenuItem("存盘");
  topItem = new MenuItem("排行榜");
  mainMenu.addItem(startItem);
  mainMenu.addItem(topItem);
  mainMenu.addSeparator();
  mainMenu.addItem(saveItem);
  mainMenu.setItemListener(new MainMenuListener());//菜单事件
  label = new Component("后退");
  label.setKeyListener(new ExitKeyListener());
  menuBar.setMenu(mainMenu);
  menuBar.setLabel(label);
  menuBar.setLayout(MenuBar.MENU_LAYOUT_R);//也可以左侧显示菜单
  setFullScreenMode(true);
  setHeader(header);
  setKeyPressedListener(new PicKeyListener());//注册任何键事件,
setMenuBar(menuBar);

看看事件的实现。

class MainMenuListener implements IMenuItemListener {
  public void actionPerformed(IMenuItemEvent e) {
   if (e.getItem() == startItem) {
    init();
    repaint();
   }else if(e.getItem()==topItem){
    alert.setString("哈哈,暂时没有排行啊");
    parent.display.setCurrent(alert);
   }else if(e.getItem()==saveItem)
   {
    alert.setString("这样也能保存啊");
    parent.display.setCurrent(alert);
   }
  }
 };
 
 class ExitKeyListener implements IKeyListener{

  public void actionPerformed(Object obj, IEvent e) {
   // TODO Auto-generated method stub
   parent.display.setCurrent(parent.mainForm);
  }
  
  
 }

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
用C#播放mp3[C#实例学习系列]
简单实现增加WPF右键菜单功能
菜单及其它资源
转载C#利用读取xml生成动态菜单
Delphi编程中动态菜单要点归纳
GTK:子菜单
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服