程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> J2ME >> JavaMe開發:低級界面繪圖之菜單(2)

JavaMe開發:低級界面繪圖之菜單(2)

編輯:J2ME

KeyID.Java

  1. package com.token.vIEw.components;
  2. public class KeyID {
  3. public static final byte KEY_EDIT=-5;//選擇
  4. public static final byte SOFT_LEFT=-6;//左軟鍵
  5. public static final byte SOFT_RIGHT=-7;//右軟鍵
  6. private KeyID(){
  7. }
  8. }

Menu.Java

  1. package com.token.vIEw.components;
  2. import Javax.microedition.lcdui.*;
  3. import Javax.microedition.lcdui.game.*;
  4. public class Menu
  5. {
  6. private String leftOption;
  7. private String rightOption;
  8. private String cancelOption = "取消";
  9. private String okOption = "確定";
  10. private String[] menuOptions;
  11. private int padding;
  12. private Font ft;
  13. private int width;
  14. private int height;
  15. public int menuHeight;
  16. public Menu(GameCanvas canvas)
  17. {
  18. width = canvas.getWidth();
  19. height = canvas.getHeight();
  20. }
  21. public Menu(GameCanvas canvas, String leftOption, String rightOption, String[] menuOptions) {
  22. this.leftOption = leftOption;
  23. this.rightOption = rightOption;
  24. this.menuOptions = menuOptions;
  25. width = canvas.getWidth();
  26. height = canvas.getHeight();
  27. } // end constructor
  28. //繪制軟鍵選項
  29. public void drawMenu(GameCanvas canvas, Graphics graphics, String leftOption, String rightOption)
  30. {
  31. width = canvas.getWidth();
  32. height = canvas.getHeight();
  33. padding = 5;
  34. ft = Font.getFont(Font.FACE_PROPORTIONAL, Font.STYLE_BOLD,
  35. Font.SIZE_LARGE);
  36. int fontHeight = ft.getHeight();
  37. menuHeight = fontHeight + 2 * padding;
  38. graphics.setColor(Color.cmdSelectTop);
  39. graphics.fillRect(0, height-menuHeight, width, menuHeight/2+1);
  40. graphics.setColor(Color.cmdSelectBottom);
  41. graphics.fillRect(0, height-menuHeight/2, width, menuHeight/2);
  42. graphics.setFont(ft);
  43. graphics.setColor(Color.label);
  44. if(leftOption!=null)
  45. {
  46. graphics.drawString(leftOption, padding, height-padding, Graphics.LEFT | Graphics.BOTTOM);
  47. }
  48. if(rightOption!=null)
  49. {
  50. graphics.drawString(rightOption, width-padding, height-padding, Graphics.RIGHT | Graphics.BOTTOM);
  51. }
  52. }
  53. public void drawSubMenu(Graphics graphics, int selectedOptionIndex)
  54. {
  55. padding = 6;
  56. ft = Font.getFont(Font.FACE_PROPORTIONAL, Font.STYLE_BOLD,
  57. Font.SIZE_MEDIUM);
  58. int fontHeight = ft.getHeight();
  59. //確定菜單的最大寬度、最大高度
  60. int submenuMaxWidth = 0;
  61. int submenuMaxHeight = 0;
  62. int currentWidth = 0;
  63. for (int i = 0; i < menuOptions.length; i++)
  64. {
  65. currentWidth = ft.stringWidth(menuOptions[i]);
  66. if (currentWidth > submenuMaxWidth)
  67. {
  68. submenuMaxWidth = currentWidth;
  69. }
  70. submenuMaxHeight += fontHeight + padding;
  71. }
  72. submenuMaxWidth += 6 * padding;//5個padding用於顯示字符
  73. int sub_padding = 3;
  74. int sub_margin_left = 2;
  75. int sub_margin_bottom = 2;
  76. int submenuFrameMaxWidth = submenuMaxWidth + 2*sub_padding;
  77. int submenuFrameMaxHeight = submenuMaxHeight + 2*sub_padding;
  78. graphics.setColor(Color.menuFrame);
  79. graphics.drawRoundRect(sub_margin_left, // x
  80. height - menuHeight - submenuFrameMaxHeight-sub_margin_bottom, // y
  81. submenuFrameMaxWidth, submenuFrameMaxHeight,5,5);
  82. graphics.setColor(Color.menuBg);
  83. graphics.fillRoundRect(sub_margin_left+1, // x
  84. height - menuHeight - submenuFrameMaxHeight-sub_margin_bottom+1, // y
  85. submenuFrameMaxWidth-1, submenuFrameMaxHeight-1,5,5);
  86. graphics.setFont(ft);
  87. int menuOptionX = sub_margin_left + sub_padding + padding;
  88. int menuOptionY = height - menuHeight - submenuMaxHeight-sub_margin_bottom-sub_padding+padding/2;
  89. for (int i = 0; i < menuOptions.length; i++)
  90. {
  91. if (i != selectedOptionIndex)
  92. {
  93. // draw unselected menu option
  94. graphics.setColor(Color.text); // black
  95. graphics.drawString(menuOptions[i], menuOptionX, menuOptionY, Graphics.LEFT
  96. | Graphics.TOP);
  97. }
  98. else
  99. {
  100. // draw selected menu option
  101. graphics.setColor(Color.selectBg);
  102. int highOptionY=height - menuHeight - sub_margin_bottom - submenuMaxHeight + i*(fontHeight + padding)-sub_padding;
  103. graphics.fillRect(sub_margin_left+sub_padding,highOptionY,submenuMaxWidth+1,fontHeight + padding);
  104. graphics.setColor(Color.selectText);
  105. graphics.drawString(menuOptions[i], menuOptionX, menuOptionY, Graphics.LEFT
  106. | Graphics.TOP);
  107. }
  108. menuOptionY += padding + fontHeight;
  109. }
  110. }
  111. public void drawInactiveMenu(GameCanvas canvas, Graphics graphics)
  112. {
  113. drawMenu(canvas, graphics,leftOption,rightOption);
  114. canvas.flushGraphics();
  115. } // end drawInactiveMenu
  116. public void drawActiveMenu(GameCanvas canvas, Graphics graphics, int selectedOptionIndex)
  117. {
  118. drawMenu(canvas, graphics,cancelOption,okOption);
  119. // draw menu options
  120. if (menuOptions != null)
  121. {
  122. drawSubMenu(graphics,selectedOptionIndex);
  123. canvas.flushGraphics();
  124. }
  125. }
  126. }

MainScreen.Java(程序有刪減,僅供學習交流)

  1. package com.token.vIEw;
  2. import Javax.microedition.lcdui.*;
  3. import Javax.microedition.lcdui.game.GameCanvas;
  4. import com.token.util.*;
  5. import com.token.vIEw.components.*;
  6. public class MainScreen extends GameCanvas
  7. {
  8. private UIController controller;
  9. private Font ft;
  10. private int width;
  11. private int height;
  12. static final String[] menuOptions = { "1.查看","2.更新","3.用戶管理","4.幫助","5.換膚","6.退出" };
  13. static int menuIdx;// 記錄是在第幾個菜單處按下的確定鍵。
  14. private int currentlySelectedIndex = 0;
  15. private boolean menuIsActive = false;
  16. private String leftOption;
  17. private String rightOption;
  18. private Graphics graphics;
  19. private Menu menu;
  20. public MainScreen(UIController control)
  21. {
  22. super(false);
  23. this.controller = control;
  24. setFullScreenMode(true);
  25. ft = Font.getFont(Font.FACE_PROPORTIONAL,Font.STYLE_BOLD,Font.SIZE_LARGE);
  26. width = getWidth();
  27. height = getHeight();
  28. graphics = getGraphics();
  29. menuIdx = 0;
  30. leftOption = "選項";
  31. rightOption = "";
  32. menu = new Menu(this, leftOption, rightOption, menuOptions);
  33. }
  34. public void show(Object[] args) {
  35. draw();
  36. //flushGraphics();
  37. }
  38. private void draw()
  39. {
  40. menu.drawInactiveMenu(this, graphics);
  41. }
  42. public void drawBase()
  43. {
  44. //clearScreen();
  45. }
  46. public void clearScreen()
  47. {
  48. graphics.setColor(0xff,0xff,0xff);
  49. graphics.fillRect(0, 0, width, height);
  50. flushGraphics();
  51. }
  52. protected void keyPressed(int keyCode)
  53. {
  54. if (menuIsActive)
  55. {
  56. if (keyCode == KeyID.SOFT_LEFT)
  57. {
  58. // cancel pressed, draw inactive menu again
  59. drawBase();
  60. menu.drawInactiveMenu(this, graphics);
  61. menuIsActive = false;
  62. }
  63. switch(keyCode)
  64. {
  65. case KEY_NUM1:
  66. currentlySelectedIndex = 0;
  67. menu.drawActiveMenu(this, graphics, currentlySelectedIndex);
  68. break;
  69. case KEY_NUM2:
  70. currentlySelectedIndex = 1;
  71. menu.drawActiveMenu(this, graphics, currentlySelectedIndex);
  72. break;
  73. case KEY_NUM3:
  74. currentlySelectedIndex = 2;
  75. menu.drawActiveMenu(this, graphics, currentlySelectedIndex);
  76. break;
  77. case KEY_NUM4:
  78. currentlySelectedIndex = 3;
  79. menu.drawActiveMenu(this, graphics, currentlySelectedIndex);
  80. break;
  81. case KEY_NUM5:
  82. currentlySelectedIndex = 4;
  83. menu.drawActiveMenu(this, graphics, currentlySelectedIndex);
  84. break;
  85. case KEY_NUM6:
  86. currentlySelectedIndex = 5;
  87. menu.drawActiveMenu(this, graphics, currentlySelectedIndex);
  88. break;
  89. case KeyID.SOFT_RIGHT:
  90. keyCode = FIRE;
  91. break;
  92. default:;
  93. }
  94. keyCode = (keyCode != FIRE)?getGameAction(keyCode):keyCode;
  95. switch(keyCode)
  96. {
  97. case UP:
  98. if(currentlySelectedIndex==0)
  99. {
  100. currentlySelectedIndex = menuOptions.length-1;
  101. }
  102. else
  103. {
  104. currentlySelectedIndex--;
  105. if (currentlySelectedIndex < 0)
  106. {
  107. currentlySelectedIndex = 0; // stay within limits
  108. }
  109. }
  110. menu.drawActiveMenu(this, graphics, currentlySelectedIndex);
  111. break;
  112. case DOWN:
  113. if(currentlySelectedIndex==menuOptions.length-1)
  114. {
  115. currentlySelectedIndex = 0;
  116. }
  117. else
  118. {
  119. currentlySelectedIndex++;
  120. if (currentlySelectedIndex >= menuOptions.length)
  121. {
  122. currentlySelectedIndex = menuOptions.length - 1;
  123. }
  124. }
  125. menu.drawActiveMenu(this, graphics, currentlySelectedIndex);
  126. break;
  127. case FIRE:
  128. {
  129. drawBase();
  130. graphics.setColor(0x000000);
  131. menu.drawInactiveMenu(this, graphics);
  132. menuIsActive = false;
  133. //按鍵處理
  134. switch(currentlySelectedIndex)
  135. {
  136. case 0:
  137. {
  138. //Object []args = {"vIEwScreen", "userAuth_name",null,null};
  139. //controller.handleEvent(UIController.EventID.EVENT_VIEW_AUTH,args);
  140. break;
  141. }
  142. case 1:
  143. {
  144. //Object []args = {"updateScreen", "userAuth_name",null,null};
  145. //controller.handleEvent(UIController.EventID.EVENT_UPDATE_AUTH, args);
  146. break;
  147. }
  148. case 2:
  149. {
  150. //Object []args = {"manageScreen", "userAuth_name",null,null};
  151. //controller.handleEvent(UIController.EventID.EVENT_USER_MANAGE_AUTH, args);
  152. break;
  153. }
  154. case 3:
  155. {
  156. //controller.handleEvent(UIController.EventID.EVENT_SHOW_HELP,null);
  157. break;
  158. }
  159. case 4:
  160. {
  161. break;
  162. }
  163. case 5:
  164. {
  165. //controller.handleEvent(UIController.EventID.EVENT_EXIT,null);
  166. break;
  167. }
  168. default:;
  169. }
  170. break;
  171. }
  172. default:;
  173. }
  174. }
  175. else
  176. {
  177. if (keyCode == KeyID.SOFT_LEFT)
  178. { // "Options" pressed
  179. menu.drawActiveMenu(this, graphics, currentlySelectedIndex);
  180. menuIsActive = true;
  181. }
  182. else if (keyCode == KeyID.SOFT_RIGHT)
  183. {
  184. }
  185. }
  186. }
  187. }

*關於UIController,後續文章將給予解釋。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved