📄 menu.java
字号:
//J2ME 中实现仿windows菜单
//构造不同的菜单项,并把整个菜单组的所有元素画在画板上
//翁荣建
//2005-06-10
//Menu.java
package menu;
import javax.microedition.lcdui.*;
public class Menu {
public static Menu instance;
private int width;//宽
private int height;//高共有3种值分别是4像素,3像素,18像素
private Image image;//菜单中的图标
private String Title;//菜单的标题
public boolean enabled = true;
public boolean isLine = false;
public Menu() {//没要参数的构造函数,直线
this.image = null;
this.Title = null;
this.isLine = true;
}
public Menu(String Title){//参数为标题,没有图标的菜单项
this.Title = Title;
}
public Menu(Image image,String Title){//参数为图片和标题,有图标的菜单项
this.image = image;
this.Title = Title;
}
public void drawStartMenu(Graphics g, int x, int y, int width) { //height=4
//画菜单的最上面一部分
this.height = 4;
this.width = width;
g.setGrayScale(255);
g.fillRect(x, y, width, 4);
g.setGrayScale(175);
g.drawLine(x, y, x + width, y);
g.drawLine(x + 3, y + 3, x + width - 3, y + 3);
g.drawLine(x, y, x, y + 3);
g.setGrayScale(0);
g.drawLine(x + width, y, x + width, y + 3);
g.setGrayScale(40);
g.drawLine(x + width - 1, y + 1, x + width - 1, y + 3);
g.setGrayScale(120);
g.drawLine(x + width - 2, y + 2, x + width - 2, y + 3);
}
public void drawEndMenu(Graphics g, int x, int y, int width) { //height=4
//画菜单的最下面一部分
this.height = 4;
this.width = width;
g.setGrayScale(255);
g.fillRect(x, y, width, 4);
g.setGrayScale(175);
g.drawLine(x, y, x, y + 3);
g.drawLine(x + 3, y, x + width - 3, y);
g.setGrayScale(0);
g.drawLine(x + width, y, x + width, y + 3);
g.drawLine(x, y + 3, x + width, y + 3);
g.setGrayScale(40);
g.drawLine(x + width - 1, y, x + width - 1, y + 2);
g.drawLine(x + 1, y + 2, x + width - 1, y + 2);
g.setGrayScale(120);
g.drawLine(x + width - 2, y, x + width - 2, y + 1);
g.drawLine(x + 2, y + 1, x + width - 2, y + 1);
}
public void drawMenu(Graphics g, int x, int y, int width) { //height=3
//画菜单项为直线的部分
this.height = 3;
this.width = width;
g.setGrayScale(255);
g.fillRect(x, y, width, 3);
g.setGrayScale(175);
g.drawLine(x, y, x, y + 3);
g.drawLine(x + 3, y, x + 3, y + 3);
g.setGrayScale(0);
g.drawLine(x + width, y, x + width, y + 3);
g.setGrayScale(40);
g.drawLine(x + width - 1, y, x + width - 1, y + 3);
g.setGrayScale(120);
g.drawLine(x + width - 2, y, x + width - 2, y + 3);
//middle line
g.drawLine(x + 3, y + 1, x + width-4, y + 1);
}
public void drawMenu(Graphics g,int x, int y, int width,
boolean select,Font font)
{//height=18
//画菜单项
g.setFont(font);
this.height = 18;
this.width = width;
int fontheight = font.getHeight();
g.setGrayScale(255);
g.fillRect(x, y, width, 18);
if(this.enabled)//菜单要处于可用态
{ if (select)
{//菜单项被选中,就画一个兰色的背景框
g.setColor(51,94,168);
g.fillRect(x + 3, y + 1, width - 6, 16);
}//end of if
}//end of if
g.setGrayScale(175);
g.drawLine(x, y, x, y + 18);
g.drawLine(x + 3, y, x + 3, y + 18);
g.setGrayScale(0);
g.drawLine(x + width, y, x + width, y + 18);
g.setGrayScale(40);
g.drawLine(x + width - 1, y, x + width - 1, y + 18);
g.setGrayScale(120);
g.drawLine(x + width - 2, y, x + width - 2, y + 18);
g.setGrayScale(0);//菜单项没被选中,前景色为黑
if (select)
g.setGrayScale(255);//菜单项被选中,前景色为白
if (!this.enabled)
g.setGrayScale(200);
g.drawString(Title, x + 5 + 14, y + (18-fontheight)/2, Graphics.TOP | Graphics.LEFT);
if(image!=null)//如果图片不为NULL的就把图片画出来
{ try
{
g.drawImage(image, x + 5, y + 3, g.TOP | g.LEFT);}
catch(Exception ex)
{}
}
}
//得到菜单项中各种元素的属性
public int getWidth()
{return width;}
public int getHeight()
{return height;}
public int getStartMenuHeight()
{return 4;}
public int getEndMenuHeight()
{return 4;}
public void setEnabled(boolean enabled)
{this.enabled=enabled;
}
public boolean getEnabled()
{return this.enabled;}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -