⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 imgmenu.java

📁 J2me实现的MSN Messeger客户端程序。聊天、添加好友、删除好友、阻止好友
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
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 + -