📄 imgmenu.java
字号:
package vitular.ui;
import java.util.*;
import javax.microedition.lcdui.*;
import javax.microedition.media.Player;
/**
*菜单类
*可以绘制图形菜单和文字菜单
*并可以显示闪烁的消息
*菜单项上下移动时可以播放声音
*@CopyRight:百维动力
*@Author:jj
*@Version 1.0 2004/6/8
*/
public class ImgMenu extends MsgCtrlBase{
private final static byte DEFAULT_ITEM_HEIGHT = 20;//默认的文字菜单菜单项高度
private final static byte DEFAULT_IMGITEM_HEIGHT = 35;//默认的图形菜单菜单项高度(宽度)
private final static byte DEFAULT_INTERVAL = 2;//默认的菜单项间隔
public final static int DEFAULT_BK_RGB = 0X4A92FF;//默认背景颜色
public final static int DEFAULT_ITEM_RGB = 0X6BDBFF;//默认菜单项颜色
public final static int DEFAULT_INTERVAL_RGB = 0XFFFF99;//默认间隔颜色
public final static int DEFAULT_TEXT_RGB = 0X0000FF;//默认文本颜色
public final static byte ALIGN_LEFT = 1; //左对齐
public final static byte ALIGN_CENTER = 2; //居中对齐
//图形
private Image img_flash = null; //闪烁图片
private Image img_point; //指向图片,在表示当前被选中的选项前显示
private Image img_bk;//菜单背景
private Graphics g_bk;//img_bk的Graphics
//数据
private short itemFocus; //当前处于focus状态的项,没有被选中时设为-1,一旦有菜单项就不可能<0
private short itemHeight; //菜单项高度
private short itemInterval;//菜单项的间隔
private byte itemShowMaxCount; //一屏可以显示最大菜单项数,需通过itemHeight计算获得
private int itemShowStartIndex; //菜单项起画序号
private boolean bImgMenu;//是否为图形风格菜单
private Vector itemVec; //菜单项列表
private boolean canReturn = false;//是否有返回
private boolean bFlash;//用于控制绘制闪烁图片
private int bk_rgb; //背景色
private int item_rgb; //选项颜色
private int interval_rgb; //间隔颜色
private int text_rgb; //文字颜色
private Player menuPlayer;//播放声音
private boolean bSoundOn;//是否播放声音
private byte alignType; //采用的对齐方式默认为居中对齐
public ImgMenu(MsgCanvas canvas, boolean imgMenu) {
this(canvas, 0, 0, MsgCanvas.ScreenWidth, MsgCanvas.ScreenHeight, imgMenu);
}
public ImgMenu(MsgCanvas canvas,int Left, int Top, int Width, int Height, boolean imgMenu){
super(canvas, Left, Top, Width, Height);
initMenu(imgMenu);
}
/**
* 初始化数据
* @param imgMenu boolean 是否为图形菜单
*/
private void initMenu(boolean imgMenu){
//初始化数据
bFlash = true;//闪烁
bImgMenu = imgMenu;
itemFocus = 0;
itemVec = new Vector();
itemShowStartIndex = 0;
//先全部按默认值设定
bk_rgb = this.DEFAULT_BK_RGB;
item_rgb = this.DEFAULT_ITEM_RGB;
interval_rgb = this.DEFAULT_INTERVAL_RGB;
text_rgb = this.DEFAULT_TEXT_RGB;
itemInterval = DEFAULT_INTERVAL;
if (bImgMenu){//如果为图形菜单
itemHeight = DEFAULT_IMGITEM_HEIGHT;
// itemHeight = (DEFAULT_IMGITEM_HEIGHT * 3 < height) ?
// DEFAULT_IMGITEM_HEIGHT : (short)(height / 3);
itemShowMaxCount = (byte)(this.width / itemHeight);
if (width%itemHeight >itemInterval*2 && itemShowMaxCount%2==1)
itemShowMaxCount +=2;
}else{//如果是文字菜单
itemHeight = DEFAULT_ITEM_HEIGHT;
itemShowMaxCount = (byte)(this.height / itemHeight);
}
//初始化图形
try{
img_point = Image.createImage("/img/point.png");
img_bk = Image.createImage(this.width, this.height);
g_bk = img_bk.getGraphics();
this.paintBK(g_bk);
}
catch(Exception e){
System.out.println(e.toString());
}
//初始化声音
bSoundOn = true;
menuPlayer = canvas.createPlayer("/img/menu.wav");
//初始化对齐方式
alignType = ALIGN_CENTER;
}
/**
*得到当前处于焦点状态的列表项号
*/
public int getFocusIndex() {
return itemFocus;
}
/**
* 得到当前处于焦点状态的列表项名称
* @return String
*/
public String getFocusName() {
return getString(itemFocus);
}
/**
* 得到当前处于焦点状态的列表项的图片
* @return Image
*/
public Image getFocusImg(){
return getImg(itemFocus);
}
/**
* 得到列表项数量
* @return int
*/
public int getItemCount() {
return itemVec.size();
}
/**
* 得到指定列表项的文字内容
* @param ItemIndex int
* @return String
*/
public String getString(int ItemIndex) {
if (ItemIndex < 0 || ItemIndex >= getItemCount()) {
return null;
}
return ((ImgMenuItem)(itemVec.elementAt(ItemIndex))).itemCaption;
}
/**
* 得到指定菜单项的图形
* @param ItemIndex int
* @return Image
*/
public Image getImg(int ItemIndex) {
if (!bImgMenu || ItemIndex < 0 || ItemIndex >= getItemCount()) {
return null;
}
return ((ImgMenuItem)(itemVec.elementAt(ItemIndex))).img_item;
}
/**
*设置焦点项
*/
//这个方法并没有考虑itemShowStartIndex的值,可能会引起一些问题
public int setItemFocus(short FocusIndex) {
if (FocusIndex >= getItemCount()) {
FocusIndex = (short)(getItemCount() - 1);
}
itemFocus = FocusIndex;
return itemFocus;
}
/**
*设置列表项的属性
*ItemIndex:列表项号
*Caption:列表项文字内容
*/
public void setItem(int ItemIndex, String Caption) {
if (ItemIndex < 0 || ItemIndex >= getItemCount()) {
return;
}
((ImgMenuItem)(itemVec.elementAt(ItemIndex))).itemCaption = Caption;
}
/**
* 设置列表项的属性
* @param ItemIndex int
* @param Caption String
* @param img Image
*/
public void setItem(int ItemIndex, String Caption, Image img){
if (ItemIndex < 0 || ItemIndex >= getItemCount()) {
return;
}
((ImgMenuItem)(itemVec.elementAt(ItemIndex))).itemCaption = Caption;
((ImgMenuItem)(itemVec.elementAt(ItemIndex))).img_item = img;
}
public void setItem(int ItemIndex, Image img){
if (ItemIndex < 0 || ItemIndex >= getItemCount()) {
return;
}
((ImgMenuItem)(itemVec.elementAt(ItemIndex))).img_item = img;
}
/**
* 添加列表项
* @param Caption String 列表项文字内容
*/
public void addItem(String Caption) {
ImgMenuItem item = new ImgMenuItem();
item.itemCaption = Caption;
itemVec.addElement(item);
if (itemVec.size() <= this.itemShowMaxCount){
this.paintBK(g_bk);
}
}
/**
* 添加列表项
* @param Caption String
* @param img Image
*/
public void addItem(String Caption, Image img) {
ImgMenuItem item = new ImgMenuItem();
item.itemCaption = Caption;
item.img_item = img;
itemVec.addElement(item);
if (itemVec.size() <= this.itemShowMaxCount){
this.paintBK(g_bk);
}
}
/**
* 添加列表项到指定位置
* @param ItemIndex int列表项号
* @param Caption String文字内容
*/
public void addItem(int ItemIndex, String Caption) {
ImgMenuItem item = new ImgMenuItem();
item.itemCaption = Caption;
itemVec.insertElementAt(item, ItemIndex);
if (itemVec.size() <= this.itemShowMaxCount){
this.paintBK(g_bk);
}
}
public void addItem(int ItemIndex, String Caption, Image img) {
ImgMenuItem item = new ImgMenuItem();
item.itemCaption = Caption;
item.img_item = img;
itemVec.insertElementAt(item, ItemIndex);
if (itemVec.size() <= this.itemShowMaxCount){
this.paintBK(g_bk);
}
}
/**
* 设置菜单项的闪烁情况
* 使指定项闪烁或者不闪烁
* @param ItemIndex int
* @param bFlash boolean
*/
public void flashMenuItem(int ItemIndex, boolean bFlash){
((ImgMenuItem)(itemVec.elementAt(ItemIndex))).bFlashing = bFlash;
}
/**
* 取得菜单项的闪烁情况
* @param ItemIndex int
* @return boolean
*/
public boolean isItemFlashing(int ItemIndex){
return ((ImgMenuItem)(itemVec.elementAt(ItemIndex))).bFlashing;
}
/**
* 设置是否有返回项
* @param rtn boolean
*/
public void setHasReturn(boolean rtn) {
canReturn = rtn;
}
/**
* 删除列表项
* @param ItemIndex int列表项序号
*/
public void removeItemAt(int ItemIndex) {
if (ItemIndex < 0 || ItemIndex >= getItemCount()) {
return;
}
itemVec.removeElementAt(ItemIndex);
}
/**
* 删除列表项
* @param Caption String列表项
*/
public void removeItem(String Caption) {
for (int i = 0; i < itemVec.size(); i++){
if (((ImgMenuItem)(itemVec.elementAt(i))).itemCaption.equals(Caption)){
itemVec.removeElementAt(i);
return;
}
}
}
/**
* 删除所有列表项
*/
public void removeAllItem() {
itemVec.removeAllElements();
}
/**
* 设置选项高度
* @param itemHeight short
*/
public void setItemHeight(short itemHeight){
this.itemHeight = itemHeight;
this.paintBK(g_bk);
}
/**
* 设置选项间隔
* @param interval short
*/
public void setInterval(short interval){
this.itemInterval = interval;
this.paintBK(g_bk);
}
/**
* 设置颜色
* @param bkColor int 背景颜色
* @param itemColor int 菜单项颜色
* @param intervalColor int 间隔颜色
* @param textColor int 文本颜色
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -