j2me的两种菜单使用总结 (二)

2014-11-24 01:34:27 · 作者: · 浏览: 1
;
private String backOption = "返回";
private String[] menuOptions;
private int padding = 5; //边框与屏幕距离

//颜色设置
private static final int defaulFontColor = 0x000000; //默认字体颜色
private static final int selectedFontColor = 0XB0171F; //选中后字体颜色
private static final int bgColor = 0xfec6e9; // 菜单背景颜色
private static final int heighLight = 0xDA70D6; //选中的菜单高亮显示颜色

//构造函数 初始化
public MenuCanvas(String leftOption, String rightOption,
String[] menuOptions) {
this.leftOption = leftOption;
this.rightOption = rightOption;
this.menuOptions = menuOptions;
}


//绘制默认显示的状态
public void drawInactiveMenu(GameCanvas canvas, Graphics g){
Font font = Font.getFont(Font.FACE_SYSTEM, Font.STYLE_PLAIN, Font.SIZE_MEDIUM); //获得字体
int fontHeignt = font.getHeight();
int width = canvas.getWidth();
int height = canvas.getHeight();
g.setColor(bgColor); //设置背景
g.fillRoundRect(0, height - fontHeignt - 2*padding, width, height, 10, 10); //绘制初始左右菜单位置矩形框
g.setFont(font); //设置字体
g.setColor(defaulFontColor); //设置为默认字体颜色
g.drawString(leftOption , padding, height - padding, g.LEFT|g.BOTTOM); //绘制左按钮
g.drawString(rightOption, width-padding, height - padding, g.RIGHT|g.BOTTOM); //绘制右按钮
canvas.flushGraphics(); //将设置好的东西重新刷屏显示



}

//绘制选择菜单时的状态
public void drawActiveMenu(GameCanvas canvas, Graphics g, int select){
Font font = Font.getFont(Font.FACE_SYSTEM, Font.STYLE_PLAIN, Font.SIZE_MEDIUM); //设置字体
int fontHeight = font.getHeight(); //字体高度
int width = canvas.getWidth(); //屏幕宽
int height = canvas.getHeight(); //屏幕高
g.setColor(bgColor); //设置菜单背景颜色
g.fillRoundRect(0, height - fontHeight - 2*padding, width, height, 10, 10); //画菜单选项的圆角矩形

//绘制默认的左右选项
g.setFont(font);
g.setColor(defaulFontColor);
g.drawString(leftOption, padding, height - padding, g.LEFT | g.BOTTOM);

// draw "Cancel" option
g.drawString(backOption, width - padding, height - padding, g.RIGHT
| g.BOTTOM);
canvas.flushGraphics(); //设置好后刷屏绘制出来

if(menuOptions != null){ //存储菜单选项的数组不为空时
int menuMaxWidth = 0; //最大菜单宽度
int menuMaxHeight = 0; //最大菜单高度
int currentWidth = 0; //目前宽度

//用来选出菜单选项最大子菜单的宽度
for(int i = 0 ; i < menuOptions.length;i++){
currentWidth = font.stringWidth(menuOptions[i]);
if(currentWidth > menuMaxWidth)
menuMaxWidth = currentWidth;

menuMaxHeight += fontHeight + padding; //菜单的高度,没加一个菜单选项相应的加一个字体高度和距离
}

menuMaxWidth +=6*padding; //设置宽度加上6个间距
g.setColor(bgColor);
g.fillRoundRect(0, //x
height - fontHeight -menuMaxHeight -2*padding,//y
menuMaxWidth, menuMaxHeight, 10, 10); //绘制圆角弹出框

g.setFont(font);
int menuOptionX = 3*padding; //菜单选项的初始横坐标
int menuOptionY = height - fontHeight - 2*padding -menuMaxHeight + padding; //菜单选项的初始纵坐标

//为每个菜单添加一条线的循环
for(int i=0; i <= menuOptions.length ; i++)
{
g.setColor(heighLight); //被选中的选框颜色
int lineOptionY = height - fontHeight - 2*padding -menuMaxHeight + i*(fontHeight + padding); //在菜单之间加一条线
g.drawLine(0, lineOptionY, menuMaxWidth -1,lineOptionY );
}

//画菜单项的循环
for(int i = 0; i < menuOptions.length; i++){
if(i != select){ //如果没被选中,则为默认显示
g.setColor(defaulFontColor);
g.drawString(menuOptions[i], menuOptionX , menuOptionY , g.LEFT|g.TOP);
}
else{ //菜单被选中时的颜色显示
g.setColor(heighLight); //选中时的颜色
int heightY = height - fontHeight - 2*pad