📄 menu.java
字号:
package penguin;
import java.io.*;
import java.lang.Class;
import java.util.*;
import javax.microedition.lcdui.*;
public class Menu {
private MenuNode[] array_menu;
private int showType;
private MenuNode menuArrow;
public int menuSelect;
public final static int SCREENWIDTH = 128;
public final static int SCREENHEIGHT = 128;
public final static int LIST = 0;
public final static int SCROLL = 1;
public final static int RADIO = 2;
public int MENUITEMCELL;
public final static int LEVLUPBLOCK = 100;
private int MENUITEMLEFT;
private int MENUITEMTOP;
private int[] showMenu = new int[20];
public Menu(MenuNode[] array_menu, MenuNode menuArrow,int MENUITEMLEFT,int MENUITEMTOP,int showType) {
this.array_menu = array_menu;
this.menuArrow = menuArrow;
this.showType = showType;
this.MENUITEMLEFT = MENUITEMLEFT;
this.MENUITEMTOP = MENUITEMTOP;
MENUITEMCELL = 4;
menuSelect = 0;
}
public void MenuBack() {
int parent = array_menu[menuSelect].parent;
if (parent != 8) {
menuSelect = parent;
}
else {
PenguinScreen.state = PenguinScreen.END;
}
return;
}
public void MenuUp() {
int parent, i;
int start = 0, end = 0;
parent = array_menu[menuSelect].parent;
for (i = 0; i < array_menu.length; i++) {
if (array_menu[i].parent == parent) {
if (start == end) {
start = i;
end = start;
}
end++;
}
}
if (menuSelect == start) {
menuSelect = end - 1;
}
else {
menuSelect--;
}
return;
}
public void MenuDown() {
int parent, i;
int start = 0, end = 0;
parent = array_menu[menuSelect].parent;
for (i = 0; i < array_menu.length; i++) {
if (array_menu[i].parent == parent) {
if (start == end) {
start = i;
end = start;
}
end++;
}
}
if (menuSelect == end - 1) {
menuSelect = start;
}
else {
menuSelect++;
}
}
public int MenuOK() {
int i;
int parent;
int re_state = array_menu[menuSelect].state;
parent = array_menu[menuSelect].parent;
for (i = 0; i < array_menu.length; i++) {
if (array_menu[i].parent == menuSelect) {
menuSelect = i;
break;
}
}
if (i == array_menu.length) {
re_state = array_menu[menuSelect].state;
menuSelect = 0;
}
return (re_state);
}
public static void drawImageEx(Graphics g, Image image, int destX,
int destY, int srcX, int srcY, int width,
int height) {
g.setClip(destX, destY, width, height);
g.drawImage(image, destX - srcX, destY - srcY, 0);
}
void paint(Graphics g,Image menuImage) {
int nowParent = array_menu[menuSelect].parent;
switch (showType) {
case LIST:
int menuNum = 0;
int arrowNum = 0;
int menuHeight=-1;
boolean arrowFlag = true;
for (int i = 0; i < array_menu.length; i++) {
if (array_menu[i].parent == nowParent) {
if(menuHeight==-1) menuHeight=array_menu[i].h;
drawImageEx(g, menuImage, MENUITEMLEFT,
MENUITEMTOP +
(array_menu[i].h + MENUITEMCELL) *
menuNum,
array_menu[i].x, array_menu[i].y,
array_menu[i].w,
array_menu[i].h);
menuNum++;
if (arrowFlag) {
if (i != menuSelect) {
arrowNum++;
}
else {
arrowFlag = false;
}
}
}
}
drawImageEx(g, menuImage, MENUITEMLEFT - menuArrow.w-5,
MENUITEMTOP +
(menuHeight + MENUITEMCELL) *
arrowNum,
menuArrow.x, menuArrow.y, menuArrow.w,
menuArrow.h);
break;
case SCROLL:
int countMenu = 0;
int maxMenu;
for (int i = 0; i < array_menu.length; i++) {
if (array_menu[i].parent == nowParent) {
showMenu[countMenu] = i;
countMenu++;
}
}
maxMenu = countMenu;
int i;
int firstMenu = -1;
int lastMenu = -1;
int nowMenu = -1;
int max_width = 0;
try {
for (i = 0; i < maxMenu; i++) {
if (showMenu[i] == menuSelect) {
nowMenu = i;
break;
}
}
firstMenu = nowMenu - 1;
lastMenu = nowMenu + 1;
if (nowMenu == 0) {
firstMenu = maxMenu - 1;
}
if (nowMenu == maxMenu - 1) {
lastMenu = 0;
}
firstMenu = showMenu[firstMenu];
lastMenu = showMenu[lastMenu];
nowMenu = showMenu[nowMenu];
if (array_menu[firstMenu].w > max_width) {
max_width = array_menu[firstMenu].w;
}
if (array_menu[nowMenu].w > max_width) {
max_width = array_menu[nowMenu].w;
}
if (array_menu[lastMenu].w > max_width) {
max_width = array_menu[lastMenu].w;
}
MENUITEMLEFT = (SCREENWIDTH - max_width) / 2;
g.setColor(18, 166, 255);
g.fillRect(MENUITEMLEFT,
MENUITEMTOP,
array_menu[firstMenu].w,
array_menu[firstMenu].h);
g.setColor(69, 187, 255);
g.fillRect(MENUITEMLEFT,
MENUITEMTOP + array_menu[firstMenu].h +
MENUITEMCELL + array_menu[nowMenu].h +
MENUITEMCELL,
array_menu[lastMenu].w,
array_menu[lastMenu].h);
if ( (firstMenu != -1) && (lastMenu != -1)) {
drawImageEx(g, menuImage,
MENUITEMLEFT -
(menuArrow.w - max_width) / 2,
MENUITEMTOP + array_menu[firstMenu].h +
MENUITEMCELL -
(menuArrow.h - array_menu[nowMenu].h) / 2,
menuArrow.x, menuArrow.y, menuArrow.w,
menuArrow.h);
drawImageEx(g, menuImage, MENUITEMLEFT, MENUITEMTOP,
array_menu[firstMenu].x,
array_menu[firstMenu].y,
array_menu[firstMenu].w,
array_menu[firstMenu].h);
drawImageEx(g, menuImage, MENUITEMLEFT,
MENUITEMTOP + array_menu[firstMenu].h +
MENUITEMCELL,
array_menu[nowMenu].x, array_menu[nowMenu].y,
array_menu[nowMenu].w, array_menu[nowMenu].h);
drawImageEx(g, menuImage, MENUITEMLEFT,
MENUITEMTOP + array_menu[firstMenu].h +
MENUITEMCELL + array_menu[nowMenu].h +
MENUITEMCELL,
array_menu[lastMenu].x,
array_menu[lastMenu].y,
array_menu[lastMenu].w,
array_menu[lastMenu].h);
}
}
catch (Exception e) {}
break;
case RADIO:
for (i=0; i<array_menu.length; i++){
drawImageEx(g, menuImage, MENUITEMLEFT+i*MENUITEMCELL,
MENUITEMTOP,
array_menu[i].x + (menuSelect*array_menu[i].w),
array_menu[i].y,
array_menu[i].w,
array_menu[i].h);
}
drawImageEx(g, menuImage, (MENUITEMLEFT-(menuArrow.w-array_menu[menuSelect].w)/2)+(1-menuSelect)*MENUITEMCELL,
MENUITEMTOP-(menuArrow.h-array_menu[menuSelect].h)/2,
menuArrow.x, menuArrow.y, menuArrow.w, menuArrow.h);//方框
break;
default:
break;
}
}
}
class MenuNode {
int parent;
int x;
int y;
int w;
int h;
int state;
public MenuNode(int parent, int x, int y, int w, int h, int state) {
this.parent = parent;
this.x = x;
this.y = y;
this.w = w;
this.h = h;
this.state = state;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -