`

J2ME GUI实战之二 ----------LWUIT实现手机九宫图

阅读更多
本文来自:http://blog.csdn.net/hellogv/ ,转载必须注明出处!
本文的源代码,已放到 http://download.csdn.net/user/hellogv 供大家下载!

首先,想让大家看看九宫图实现之后的界面:


本文所用的代码,是来自LWUIT所提供的Sample例子,但是对例子做出以下修改:
1.设计自主的res资源文件
2.把builde.xml里面的<target name="post-compile"> 。。。。。</target> 删除
3.把所用的res文件放到一个名为res的文件夹,并与源代码放在一起
4.把ResourceBuilder.jar也删除,util文件夹里的ResourceBuilder.jar绝对不能删,是用于设计res文件

针对以上4点,说明一下为什么这么做:
原Sample例子的res文件,是使用util文件夹里的ResourceEdit.exe设计,而且还在builde.xml中使用ResourceBuilder.jar再重新生成一次res文件并与源文件组合,这显然有点冗余,因为直接用ResourceEdit.exe设计的res文件放到源文件目录里即可。也许Sample作者直接使用ANT编译或者是其他IDE要求,本文所用的IDE为netbeans。

OK,接下来就是源代码修改了,Sample源代码可是写得很长很长,要看也得花不少时间,但是,我保证大家看完后一定领略到JAVA大牛的编程功力之深!!!为了方便以后使用,所以我把Sample中实现九宫图和一些小操作的代码保留,其他都去掉了,请JAVA大牛切勿见笑哈。
以下给出关键代码:

  1. /*
  2. *Copyright?2008SunMicrosystems,Inc.Allrightsreserved.
  3. *Useissubjecttolicenseterms.
  4. *
  5. */
  6. packagecom.sun.lwuit.uidemo;
  7. importcom.sun.lwuit.Button;
  8. importcom.sun.lwuit.animations.CommonTransitions;
  9. importcom.sun.lwuit.Command;
  10. importcom.sun.lwuit.Component;
  11. importcom.sun.lwuit.Dialog;
  12. importcom.sun.lwuit.Display;
  13. importcom.sun.lwuit.Form;
  14. importcom.sun.lwuit.Image;
  15. importcom.sun.lwuit.Label;
  16. importcom.sun.lwuit.animations.Transition;
  17. importcom.sun.lwuit.animations.Transition3D;
  18. importcom.sun.lwuit.events.ActionEvent;
  19. importcom.sun.lwuit.events.ActionListener;
  20. importcom.sun.lwuit.events.FocusListener;
  21. importcom.sun.lwuit.layouts.GridLayout;
  22. importcom.sun.lwuit.plaf.Style;
  23. importcom.sun.lwuit.plaf.UIManager;
  24. importcom.sun.lwuit.util.Resources;
  25. publicclassUIDemoMIDletextendsjavax.microedition.midlet.MIDletimplementsActionListener{
  26. privatestaticfinalCommandexitCommand=newCommand("Exit",1);
  27. privateString[]btn_name=newString[]{//九宫图的名称,同时也是图标的名称
  28. "Image1","Image2","Image3","Image4","Image5","Image6","Image7",
  29. "Image8","Image9"
  30. };
  31. privatestaticTransitioncomponentTransitions;
  32. privatestaticFormmainMenu;//主窗体
  33. privateintcols;
  34. privateintelementWidth;
  35. protectedvoidstartApp(){
  36. try{
  37. Display.init(this);
  38. Resourcesr=Resources.open("/res/resources.res");//读取资源文件
  39. setMainForm(r);
  40. }catch(Throwableex){
  41. ex.printStackTrace();
  42. Dialog.show("Exception",ex.getMessage(),"OK",null);//hellogv最爱的提示框弹出方式
  43. }
  44. }
  45. protectedvoidpauseApp(){
  46. }
  47. protectedvoiddestroyApp(booleanarg0){
  48. }
  49. publicstaticvoidsetMenuTransition(Transitionin,Transitionout){
  50. mainMenu.setMenuTransitions(in,out);
  51. UIManager.getInstance().getLookAndFeel().setDefaultMenuTransitionIn(in);
  52. UIManager.getInstance().getLookAndFeel().setDefaultMenuTransitionOut(out);
  53. }
  54. publicstaticvoidsetComponentTransition(Transitiont){
  55. componentTransitions=t;
  56. mainMenu.setSmoothScrolling(false);
  57. }
  58. publicstaticTransitiongetComponentTransition(){
  59. returncomponentTransitions;
  60. }
  61. publicstaticvoidbackToMainMenu(){
  62. mainMenu.refreshTheme();
  63. mainMenu.show();
  64. //forseries40devices
  65. System.gc();
  66. System.gc();
  67. }
  68. privatevoidsetMainForm(Resourcesr){
  69. //设置主题
  70. UIManager.getInstance().setThemeProps(r.getTheme("businessTheme"));
  71. mainMenu=newMainScreenForm("LWUITDemo");
  72. intwidth=Display.getInstance().getDisplayWidth();//取得全屏的宽度
  73. elementWidth=0;
  74. //效果,可以实现类似IPhone、S1智能机的TouchFlo的动态窗体切换效果!**********************
  75. mainMenu.setTransitionOutAnimator(CommonTransitions.createSlide(CommonTransitions.SLIDE_HORIZONTAL,false,500));
  76. mainMenu.setTransitionInAnimator(CommonTransitions.createSlide(CommonTransitions.SLIDE_HORIZONTAL,true,500));
  77. UIDemoMIDlet.setComponentTransition(Transition3D.createCube(600,false));
  78. //***************************************************************************************************************
  79. Image[]selectedImages=newImage[btn_name.length];//按钮被选中时的图片
  80. Image[]unselectedImages=newImage[btn_name.length];//按钮未被选中的图片
  81. for(inti=0;i<btn_name.length;i++){
  82. //---------读取选中时的图片
  83. selectedImages[i]=r.getImage(btn_name[i]);
  84. //--------读取未被选中的图片
  85. unselectedImages[i]=r.getImage(btn_name[i]);
  86. finalButtonbutton=newButton(btn_name[i],unselectedImages[i])
  87. {
  88. publicImagegetPressedIcon(){
  89. Imagei=getIcon();
  90. returni.scaled((int)(i.getWidth()*0.8),(int)(i.getHeight()*0.8));
  91. }
  92. };
  93. button.setRolloverIcon(selectedImages[i]);
  94. Styles=button.getStyle();
  95. s.setBorder(null);
  96. s.setBgTransparency(0);
  97. s.setBgSelectionColor(0xffffff);
  98. button.setAlignment(Label.CENTER);
  99. button.setTextPosition(Label.BOTTOM);
  100. mainMenu.addComponent(button);
  101. button.addActionListener(this);
  102. //按钮焦点处理,用于实现按钮特效
  103. button.addFocusListener(newFocusListener(){
  104. publicvoidfocusGained(Componentcmp){//按钮取得焦点时的特效
  105. if(componentTransitions!=null){
  106. mainMenu.replace(button,button,componentTransitions);
  107. }
  108. }
  109. publicvoidfocusLost(Componentcmp){}//按钮失去焦点时的特效
  110. });
  111. elementWidth=Math.max(button.getPreferredW(),elementWidth);
  112. }
  113. cols=width/elementWidth;
  114. introws=btn_name.length/cols;
  115. mainMenu.setLayout(newGridLayout(rows,cols));//GridLayout为九宫图的排列方式
  116. mainMenu.addCommand(exitCommand);
  117. mainMenu.setCommandListener(this);
  118. mainMenu.show();
  119. }
  120. /**
  121. *控件处理函数
  122. */
  123. publicvoidactionPerformed(ActionEventevt){
  124. try{//通过异常处理来判断事件来源
  125. Commandcmd=evt.getCommand();
  126. if(cmd.getCommandName().equals("Exit"))
  127. notifyDestroyed();
  128. }catch(Exceptione)
  129. {
  130. Stringsel_button=((Button)(evt.getSource())).getText();//取得所选按钮的名称
  131. if(sel_button.equals("Image1"))
  132. newAnimationDemo().form.show();
  133. elseif(sel_button.equals("Image2"))
  134. newPaintingDemo().form.show();
  135. elseif(sel_button.equals("Image3"))
  136. newLayoutDemo().form.show();
  137. }
  138. }
  139. }

好了,本文就介绍到这里,关于J2ME LWUIT的摸索还在继续,希望大家多多支持LWUIT,让它越做越好!
分享到:
评论

相关推荐

    J2ME LWUIT 之九宫图

    标题“J2ME LWUIT 之九宫图”指的是使用LWUIT库在J2ME平台上实现一个类似于iPhone上的九宫格布局的界面。九宫图通常是一种常见的布局方式,用于展示多个相互关联的小模块或应用图标,用户可以通过点击这些图标来启动...

    lwuit.rar_J2ME lwuit_LWUIT_j2me_j2me LWU_九宫

    标题中的"lwuit.rar_J2ME lwuit_LWUIT_j2me_j2me LWU_九宫"表明这是一个与LWUIT相关的压缩包,内容可能包含了实现J2ME平台上九宫图功能的代码或资源。 九宫图是一种常见的界面布局方式,通常用于显示多个小视图,如...

    J2ME手机游戏实例之--俄罗斯方块

    《J2ME手机游戏实例之--俄罗斯方块》 Java Micro Edition(J2ME)是Java平台的一个子集,主要用于嵌入式设备和移动设备,如早期的智能手机。本实例将探讨如何使用J2ME开发经典游戏——俄罗斯方块。在手机上实现这个...

    j2me----api

    j2me----api j2me----api j2me----api j2me----api j2me----api j2me----api j2me----api j2me----api j2me----api j2me----api

    J2ME游戏源码---泡泡堂

    J2ME是Java平台的一个子集,专为资源有限的移动设备如手机、PDA等设计,因此在移动游戏开发领域有着广泛的应用。 在这款泡泡堂游戏中,我们可以学习到以下几个关键知识点: 1. **J2ME架构**:了解J2ME的基本结构,...

    JAVA游戏编程之三----j2me 手机游戏入门开发--俄罗斯方块_4_增加消除行声音

    在“JAVA游戏编程之三----j2me 手机游戏入门开发--俄罗斯方块_4_增加消除行声音”这个主题中,我们将学习如何在已有的游戏基础上加入消除行时的声音反馈,让游戏体验更加生动有趣。 首先,了解基本的J2ME编程是必要...

    J2ME游戏源码---bubble breaker

    Java 2 Micro Edition(J2ME)是Java平台的一个子集,主要用于开发在移动设备、嵌入式系统等资源有限的环境中的应用程序,特别是手机游戏。"J2ME游戏源码---bubble breaker"是一个基于J2ME的游戏项目,它是一个经典...

    JAVA游戏编程之二----j2me MIDlet 手机游戏入门开发--扫雷(2)-不含线程

    扫雷(2)是在扫雷(1)的基础上增加 完善了部分代码基本逻辑不变! 使得游戏更好玩了,代码两也增加到400行,比较适合初学者,可读性强,有详尽的代码注释。 数字键1标红旗,不确定,取消标记。...

    J2ME_Loader-1.7.7-open-release.apk

    J2ME_Loader-1.7.7-open-release.apk

    J2ME手机游戏开发--五子棋

    在移动设备技术发展初期,J2ME(Java 2 Micro Edition)是用于开发移动应用程序,尤其是手机游戏的主流平台之一。本项目是一个基于J2ME技术实现的五子棋游戏,展现了开发者对Java编程语言和移动游戏开发的基本理解。...

    j2me手机游戏实例之--俄罗斯方块

    《J2ME手机游戏实例——俄罗斯方块》 在移动设备普及的年代,J2ME(Java Micro Edition)因其跨平台特性和轻量级的特性,成为开发手机游戏的热门选择。本实例将深入探讨如何使用J2ME来实现经典游戏——俄罗斯方块。...

    JAVA游戏编程之三----j2me 手机游戏入门开发--俄罗斯方块_3_增加成绩记录

    作者:雷神 QQ:38929568 QQ群:28048051JAVA游戏编程(满) 28047782(满) 50761834(忙) 31572546(新) 手机游戏开发职业群51871468(,非从事手机开发者勿进!欢迎测试策划美工程序) &lt;br&gt;声明:本人...

    J2me AES 加密解密 crypto-aes

    终于找到了一个能在J2ME 上面用的了 J2me AES 加密解密 crypto-aes

    j2me手机游戏开发基础---j2me手机游戏开发基础

    j2me手机游戏开发基础

    j2me扫雷----适合初学者

    6. **资源管理**:游戏可能使用了图片或其他资源,学习如何在J2ME中加载和管理这些资源,例如使用Image类加载图片。 7. **调试与测试**:掌握如何在模拟器或真实设备上进行测试和调试,确保游戏在不同设备上的兼容...

    j2me 手机游戏入门开发--俄罗斯方块_5_使用LUA脚本写游戏

    在本文中,我们将深入探讨如何使用J2ME(Java 2 Micro Edition)和LUA脚本语言进行手机游戏开发,以实现一个经典的俄罗斯方块游戏。J2ME是一种轻量级的Java平台,广泛用于移动设备,如早期的智能手机和平板电脑。LUA...

    J2ME_Loader-1.5.6-open-release.apk

    安卓手机上的j2me模拟器 可导入本地jar文件 可模拟Java手机(比如塞班)用的软件 可以体验以前的手机操作

    j2me_wireless_toolkit-2_2-windows

    j2me_wireless_toolkit-2_2-windows 由于附件不能超过10M,只好分两部分发了

    利用J2ME制作的手机游戏----贪吃蛇

    《利用J2ME制作的手机游戏——贪吃蛇》 J2ME,全称为Java Micro Edition,是Java平台的一个重要分支,主要用于嵌入式设备和移动设备上的应用程序开发,包括手机游戏。这篇博客主要探讨了如何使用J2ME技术来制作经典...

Global site tag (gtag.js) - Google Analytics