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

📄 imgmenu.java

📁 J2me实现的MSN Messeger客户端程序。聊天、添加好友、删除好友、阻止好友
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
   */
  public void setColor(int bkColor, int itemColor, int intervalColor, int textColor){
    bk_rgb = bkColor;
    item_rgb = itemColor;
    interval_rgb = intervalColor;
    text_rgb = textColor;
    this.paintBK(g_bk);
  }

  /**
   * 菜单
   *将列表项焦点下移
   */
  public int nextItem() {
    int countDiff = getItemCount() - itemShowMaxCount;

    itemFocus++;
    if (countDiff > 0 && itemShowStartIndex <= itemFocus - itemShowMaxCount) {
      itemShowStartIndex++;
    }
    if (itemFocus >= getItemCount()) {
      itemFocus = 0; //自动循环跳转
      if (countDiff > 0) {
        itemShowStartIndex = 0;
      }
    }
    //播放声音
    playSound();
    return itemFocus;
  }

  /**
   *菜单
   *将列表项焦点上移
   */
  public int prevItem() {
    int countDiff = getItemCount() - itemShowMaxCount;
    itemFocus--;
    //滚动
    if (countDiff > 0 && itemFocus < countDiff &&
        itemShowStartIndex > itemFocus) {
      itemShowStartIndex--;
    }

    if (itemFocus < 0) {
      itemFocus = (short)(getItemCount() - 1); //自动循环跳转
      if (countDiff > 0) {
        itemShowStartIndex = countDiff;
      }
    }
    //播放声音
    playSound();
    return itemFocus;
  }

  /**
   * 播放声音
   */
  private void playSound(){
    if (menuPlayer != null && bSoundOn) {
            try{
              if (menuPlayer.getState() == 0){
                menuPlayer.stop();
              }
              menuPlayer.start();
            }
            catch(Exception e){System.out.println(e.toString());}
      }
  }

  public void setSoundOn(boolean on){
    bSoundOn = on;
  }

  /**
   * 处理按键事件
   * @param code int
   */
  public void keyPressed(int code) {
    if (active == false) {
      return;
    }

    switch (code) {
      case MsgCanvas.KEY_UP:
      case MsgCanvas.UP:
        if (!bImgMenu){
          prevItem();
        }
        break;
      case MsgCanvas.KEY_DOWN:
      case MsgCanvas.DOWN:
        if (!bImgMenu){
          nextItem();
        }
        break;
      case MsgCanvas.KEY_LEFT:
      case MsgCanvas.LEFT:
        if (bImgMenu){
          prevItem();
        }
        break;
      case MsgCanvas.KEY_RIGHT:
      case MsgCanvas.RIGHT:
        if (bImgMenu){
          nextItem();
        }
        break;
      case MsgCanvas.KEY_SELECT:
      case MsgCanvas.KEY_SOFT1:
      case MsgCanvas.FIRE:
        if (itemFocus > 0 || itemFocus < getItemCount()) {
          dispatchEvent(EVT_MENU_SELECT, itemFocus, getString(itemFocus));
        }
        break;
      case MsgCanvas.KEY_SOFT2:
      case MsgCanvas.KEY_CLEAR:
        if (canReturn == true) {
          dispatchEvent(EVT_MENU_CLOSE, -1, null);
        }
        break;
    }
  }

  /**
   * 绘制菜单,paint方法不能自己激发,需要主类方法调用
   * @param g Graphics
   * @param rtn boolean 是否有返回,退出
   */
  public void updateSelf(Graphics g) {
    if (!visible) {
      return;
    }
    bFlash = !bFlash;
    if (bImgMenu){
      //System.out.println("paintImgMenu");
      paintImgMenu(g);
    }
    else{

      paintStringMenu(g);
    }
  }

  /**
   * 绘制图形菜单
   * @param g Graphics
   */
  private void paintImgMenu(Graphics g){
    //先计算一些数据
    try{
      //先画背景
      g.drawImage(img_bk, left, top, Graphics.LEFT | Graphics.TOP);
      byte drawCount = itemShowMaxCount > itemVec.size() ? (byte) (itemVec.size()) :
          itemShowMaxCount;
      if (drawCount % 2 == 0) //偶数
        drawCount++;

      int drawLeft = (width - drawCount * this.itemHeight + itemInterval) / 2;
      int drawTop = (height - this.itemHeight * 3) / 2;
      byte w = (byte) (itemHeight - itemInterval); //实际绘制的菜单项比预算的要小一些

      //画黄色背景
      g.setColor(item_rgb);
      g.fillRect(left, top, width, height - drawTop - itemHeight * 4 / 3); //填充背景
      //画被选中的框框
      g.fillRect(drawLeft + (drawCount >> 1) * itemHeight + itemInterval / 2,
                 height - drawTop - itemHeight,
                 w,
                 w);
      //画分隔线
      g.setColor(interval_rgb);
      g.drawLine(0, height - drawTop - itemHeight - itemHeight / 3,
                 width, height - drawTop - itemHeight - itemHeight / 3);
      //画图片
      for (byte i = 0; i < drawCount; i++) {
        int index = i + this.getFocusIndex() - drawCount / 2;
        if (index >= itemVec.size())
          index = index % itemVec.size();
        while (index < 0)
          index += itemVec.size();

        g.setClip(drawLeft + i * itemHeight + itemInterval / 2,
                  height - drawTop - itemHeight,
                  w + 1,
                  w + 1);
        g.drawImage(getImg(index),
                    drawLeft + i * itemHeight + itemHeight / 2,
                    height - drawTop - itemHeight / 2,
                    Graphics.HCENTER | Graphics.VCENTER);
        g.setColor(interval_rgb);
        g.drawRect(drawLeft + i * itemHeight + itemInterval / 2,
                   height - drawTop - itemHeight, w, w);
      }
      g.setClip(0, 0, width, height);
      //画当前被选中的图片和文字
      g.drawImage(getFocusImg(),
                  width / 2,
                  height - drawTop - itemHeight * 2,
                  Graphics.HCENTER | Graphics.BOTTOM);
      g.setColor(text_rgb);
      g.drawString(this.getFocusName(),
                   width / 2,
                   height - drawTop - itemHeight * 2 +
                   (itemHeight * 2 / 3 - textFont.getHeight()) / 2,
                   Graphics.HCENTER | Graphics.TOP);
    }
    catch(Exception e){
      System.out.println(e.toString());
    }
  }

  /**
   * 绘制文字菜单
   * @param g Graphics
   */
  private void paintStringMenu(Graphics g){
    try{
      itemShowMaxCount = (byte) (this.height / itemHeight);
      g.drawImage(img_bk, left, top, Graphics.LEFT | Graphics.TOP);
      byte drawCount = itemShowMaxCount > itemVec.size() ?
          (byte) (itemVec.size()) : itemShowMaxCount;
      byte h = (byte) (itemHeight - itemInterval); //实际绘制的菜单项比预算的要小一些
      int arcW = itemHeight / 2;
      int w = (byte) (width * 0.8);
      int drawLeft = (width - w) / 2;
      int drawTop = (height - itemHeight * drawCount) / 2 + 1;

      for (byte i = 0; i < drawCount; i++) {
        int index = i + this.itemShowStartIndex;
        if (index >= itemVec.size())
          index = index % itemVec.size();
        while (index < 0)
          index += itemVec.size();
          //画黄框
        g.setColor(interval_rgb);
        g.fillRoundRect(drawLeft + itemInterval / 2,
                        drawTop + itemHeight * i + itemInterval / 2, w, h, arcW,
                        arcW);
        //画篮框
        g.setColor(item_rgb);
        g.fillRoundRect(drawLeft + itemInterval,
                        drawTop + itemHeight * i + itemInterval,
                        w - itemInterval, h - itemInterval, arcW, arcW);
        //写文字
        g.setColor(text_rgb);

        String s = getString(index);
//        if (s.length()>15)
//          s = s.substring(0,15) + "...";
//        g.setClip(drawLeft + 20,
//                   drawTop + i * itemHeight +
//                       (itemHeight - textFont.getHeight()) / 2,
//                   w - 40,
//                   h - itemInterval);
        if (alignType == ALIGN_CENTER){
          g.drawString(getString(index), width >> 1,
                     drawTop + i * itemHeight +
                     (itemHeight - textFont.getHeight()) / 2,
                     Graphics.HCENTER | Graphics.TOP);
        }else{
          g.drawString(s,
                       drawLeft + 20,
                       drawTop + i * itemHeight +
                       (itemHeight - textFont.getHeight()) / 2,
                       Graphics.LEFT | Graphics.TOP);
        }
//        g.setClip(0, 0, width, height);

        //绘制闪烁图片
        if (this.bFlash
            && img_flash != null
            && ( (ImgMenuItem) (itemVec.elementAt(index))).bFlashing) { //如果当前为显示闪烁图片状态
          g.drawImage(img_flash,
                      drawLeft + w - 6,
                      drawTop + i * itemHeight +
                      (itemHeight - img_flash.getHeight()) / 2,
                      Graphics.RIGHT | Graphics.TOP);
        }
      }
      if (itemVec.size() <= 0) {//如果没有菜单项
        //显示“无”
        g.drawString("无",
                     width/2 - textFont.stringWidth("无")/2,
                     height/2,
                     Graphics.LEFT | Graphics.TOP );

      }else{
        //画当前选中的选项
        g.drawImage(img_point,
                    drawLeft + 6,
                    drawTop +
                    (getFocusIndex() - itemShowStartIndex) * itemHeight +
                    itemHeight / 2,
                    Graphics.LEFT | Graphics.VCENTER);
        //System.out.println("paintStringMenu");

      }
    }
    catch(Exception e){System.out.println(e.toString());}
  }

  /**
   * 画背景
   * @param g Graphics
   */
  private void paintBK(Graphics g){
    g.setColor(bk_rgb);
    g.fillRect(left, top, width, height);//填充背景
  }

  /**
   * 设置闪烁图片
   * @param flashImg Image
   */
  public void setFlashImg(Image flashImg){
    this.img_flash = flashImg;
  }

  /**
   * 菜单项
   * <p>Title: </p>
   * <p>Description: </p>
   * <p>Copyright: Copyright (c) 2004</p>
   * <p>Company: </p>
   * @author not attributable
   * @version 1.0
   */
  public class ImgMenuItem{
    public Image img_item = null;//如果是图形菜单,则是必须提供的图片
    public boolean bFlashing;//是否闪烁
    public String itemCaption;//显示的文字
    public String strData;//蔡单项携带的数据
    public ImgMenuItem(){
      bFlashing = false;
    }
  }

  /**
   * 设置文字菜单的对齐方式
   * 图形菜单不存在对齐方式的问题
   * @param type byte
   */
  public void setAlignType(byte type){
    alignType = type;
  }

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -