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

📄 platepanel.java

📁 在j2me手机上显示调整图片色板
💻 JAVA
字号:
package barontools.changethecolor;

import javax.microedition.lcdui.*;

/**
 * <p>Title: </p>
 * <p>Description: </p>
 * <p>Copyright: Copyright (c) 2007</p>
 * <p>Company: </p>
 * @author not attributable
 * @version 1.0
 */

public class PlatePanel extends BaronComponent {
  /**
   * 配置变量
   *
   *
   */
  public  int plateInit=16;//色块的最大值
  private int verticalScrollBarWidth=4;//vertical scroll bar width;
  public final static int COLOR_WHITE=0xffffff;
  public final static int COLOR_GRAY=0x898989;
  public final static int COLOR_BLUE=0xFF;
  public final static int COLOR_TRANS=0x1000000;
  private  int mainBarHeight=2;
  private int mainFrameBorder=2;
  private int textInputHeight=16;
  private int keyActionOwner=0;
  private final static int KEYOWNER_COLORBOX=0;
  private final static int KEYOWNER_TEXTINPUT=1;
  /**
   * 可变变量,geter,seter
   * */
  //private boolean autoSize = false;
  private int colorBoxWidth = 16;
  private int colorBoxHeight = 16;
  private  ColorBox[] colors;

  /**
   * 纯内部变量,不可读取
   * */
 // private ColorBox [] colors;

  private int colorsStartX=0,colorsStartY=0;
  private boolean needVerticalScroll=false;//垂直滚动条是否要出现的标志。
  private int  cbpaw=0,cbpah=0;//画色块的区域的大小,与VerticalScrollBar等分开以便快速的更改界面布局。
  private int cbColumnCount=0,cbRowCount=0;
  private int selectedColorBoxIndex=0;
  private int [] colorDisp=new int[6];
  private int textCurserPos=0;
  private ChangeTheColorCanvas parent;
  private int vsMove=0;
  public PlatePanel(ChangeTheColorCanvas ctcc) {
    parent=ctcc;
    init();
  }
  private void init(){
    colors=new ColorBox[plateInit];
    for(int i=0;i<colors.length;i++){
      colors[i]=new ColorBox(COLOR_TRANS);
    }
    setSize(128,128);
  }

//  public void setAutoSize(boolean autoSize) {
//    this.autoSize = autoSize;
//  }

  public void setColorBoxWidth(int colorBoxWidth) {
    this.colorBoxWidth = colorBoxWidth;
  }

  public void setColorBoxHeight(int colorBoxHeight) {
    this.colorBoxHeight = colorBoxHeight;
  }

  public void setColors(ColorBox[] colors) {
    this.colors = colors;
     setColorBoxsPosistion();
  }

//  public boolean isAutoSize() {
//    return autoSize;
//  }

  public int getColorBoxWidth() {
    return colorBoxWidth;
  }

  public int getColorBoxHeight() {
    return colorBoxHeight;
  }

  public ColorBox[] getColors() {
    return colors;
  }
  public void setColorAt(int i,int color){
    colors[i].setColor(color);
  }
  public int getColorAc(int i){
    return colors[i].getColor();
  }

  public void setSize(int w, int h) {//重写此函数以便在其变化时做界面调整
    super.setSize(w, h);
    setColorBoxsPosistion();
  }

//  public void setWidth(int w) { //重写此函数以便在其变化时做界面调整
//    cbpaw=getColorBoxPaintAreaWidth(w);
//    colorsStartX=(cbpaw%colorBoxWidth)/2+getColorBoxPaintAreaX();//希望能居中
//    cbColumnCount=cbpaw/colorBoxWidth;
//    setColorBoxsPosistion();
//    super.setWidth(w);
//  }
//  public void setHeight(int h){//重写此函数以便在其变化时做界面调整
//    cbpah=getColorBoxPaintAreaHeight(h);
//    int wcount=getColorBoxPaintAreaWidth(getWidth())/colorBoxWidth;
//    int hcount=plateLimited/wcount;
//    if(plateLimited%wcount!=0){
//      hcount++;
//    }
//    //cbRowCount=hcount;
//      if (hcount * colorBoxHeight > cbpah) {
//        needVerticalScroll = true;
//        colorsStartY = getColorBoxPaintAreaY();//这里可能有问题
//      }
//      else {
//        needVerticalScroll = false;
//        colorsStartY = (cbpah % colorBoxHeight) / 2+getColorBoxPaintAreaY();//希望能居中
//      }
//      setColorBoxsPosistion();
//    super.setHeight(h);
//  }
  public void keyAction(int key) {
    /**@todo Implement this barontools.changethecolor.BaronComponent abstract method*/
    if (keyActionOwner == KEYOWNER_COLORBOX) {
      int currentRow=selectedColorBoxIndex/cbColumnCount;
      int currentColumn=selectedColorBoxIndex%cbColumnCount;
      int tailCount=(colors.length%cbColumnCount)!=0?(colors.length%cbColumnCount):cbColumnCount;
      switch (key) {
        case Canvas.UP:
          if(currentRow==0){
              selectedColorBoxIndex=(cbRowCount-((currentColumn>tailCount-1)?2:1))*cbColumnCount+currentColumn;

          }else{
            selectedColorBoxIndex=selectedColorBoxIndex - cbColumnCount;
          }

          break;
        case Canvas.DOWN:
          int dnext=selectedColorBoxIndex+cbColumnCount;
          if(dnext>=colors.length){
            selectedColorBoxIndex = dnext % cbColumnCount;
          }else {
            selectedColorBoxIndex = dnext;
          }

          break;
        case Canvas.LEFT:
          if(currentRow+1==cbRowCount){
             selectedColorBoxIndex=currentRow*cbColumnCount+(currentColumn+tailCount-1)%tailCount;
          }else{
            selectedColorBoxIndex=currentRow*cbColumnCount+(currentColumn+cbColumnCount-1)%cbColumnCount;
          }
          break;
        case Canvas.RIGHT:
          if(currentRow+1==cbRowCount){
             selectedColorBoxIndex=currentRow*cbColumnCount+(currentColumn+1)%tailCount;
          }else{
            selectedColorBoxIndex=currentRow*cbColumnCount+(currentColumn+1)%cbColumnCount;
          }

          break;
        case Canvas.FIRE:
          if(colors[selectedColorBoxIndex].getColor()!=COLOR_TRANS){
            keyActionOwner = KEYOWNER_TEXTINPUT;
            setDispColor(colors[selectedColorBoxIndex].getColor());
          }
          break;
      }
      if (colors[selectedColorBoxIndex].y + vsMove < getColorBoxPaintAreaY()) {
        vsMove +=
            (getColorBoxPaintAreaY() - colors[selectedColorBoxIndex].y - vsMove);
      }
      else if (colors[selectedColorBoxIndex].y + vsMove + getColorBoxHeight() >
               getColorBoxPaintAreaY() + getColorBoxPaintAreaHeight()) {
        vsMove -=
            (colors[selectedColorBoxIndex].y + vsMove + getColorBoxHeight() - getColorBoxPaintAreaY() -
             getColorBoxPaintAreaHeight());
      }
    }
    else if (keyActionOwner == KEYOWNER_TEXTINPUT) {
      switch (key) {
        case Canvas.UP:
          colorDisp[textCurserPos]=(colorDisp[textCurserPos]+0xf)%0x10;
          break;
        case Canvas.DOWN:
          colorDisp[textCurserPos]=(colorDisp[textCurserPos]+1)%0x10;
          break;
        case Canvas.LEFT:
          textCurserPos=(textCurserPos+5)%6;
          break;
        case Canvas.RIGHT:
          textCurserPos=(textCurserPos+1)%6;
          break;
      }
      if(key==Canvas.FIRE){
          keyActionOwner=KEYOWNER_COLORBOX;
      }else{
        colors[selectedColorBoxIndex].setColor(getDispColor());
        parent.changeTheColor(selectedColorBoxIndex,getDispColor());
      }
    }
  }

  public void pointerAction(int x, int y) {
    /**@todo Implement this barontools.changethecolor.BaronComponent abstract method*/
  }
  private int getColorBoxPaintAreaWidth(){
    return getWidth()-mainFrameBorder*2-verticalScrollBarWidth;//两侧都有Frame border
  }
  private int getColorBoxPaintAreaHeight(){
    return getHeight()-mainFrameBorder*2-mainBarHeight-textInputHeight;//上下都有有Frame border,下面有输入框
  }
  private int getColorBoxPaintAreaX(){
    return mainFrameBorder;
  }
  private int getColorBoxPaintAreaY(){
    return mainBarHeight+mainFrameBorder;//有Frame border
  }
  public void paint(Graphics g) {
  /**@todo Implement this barontools.changethecolor.BaronComponent abstract method*/
  paintBackGround(g);
  paintColorBoxs(g);
  paintTextInput(g);
  paintFrame(g);
}

  private void paintBackGround(Graphics g){
    g.setColor(COLOR_GRAY);
    g.fillRect(xPosition,yPosition,getWidth(),getHeight());
  }
  private void paintColorBoxs(Graphics g){
    int oClipX=g.getClipX(),oClipY=g.getClipY();
    int oClipW=g.getClipWidth(),oClipH=g.getClipHeight();
    g.setClip(getColorBoxPaintAreaX()+xPosition,getColorBoxPaintAreaY()+yPosition,getColorBoxPaintAreaWidth(),getColorBoxPaintAreaHeight());

    int frameColor=0;//black;

    for(int i=0;i<colors.length;i++){
      ColorBox tcb=colors[i];
      int x=tcb.x+xPosition;
      int y=tcb.y+yPosition+vsMove;
      if(tcb.getColor()==COLOR_TRANS){
        drawTrans(g,x,y,colorBoxWidth,colorBoxHeight);
      }else{
        g.setColor(tcb.getColor());
        g.fillRect(x,y,colorBoxWidth,colorBoxHeight);
      }
      if (i == selectedColorBoxIndex) {
        g.setColor(COLOR_WHITE);
      }else {
        g.setColor(frameColor);
      }
      g.drawRect(x,y,colorBoxWidth-1,colorBoxHeight-1);
    }
        g.setClip(oClipX,oClipY,oClipW,oClipH);
  }
  private void paintTextInput(Graphics g){
    int tiy = yPosition + getHeight() - textInputHeight - 2;
    g.setColor(COLOR_WHITE);
    g.fillRect(xPosition + 2, tiy, getWidth() - 4, textInputHeight);
    if (keyActionOwner == KEYOWNER_COLORBOX) {
      g.setColor(0);
      if (colors[selectedColorBoxIndex].getColor() == COLOR_TRANS) {
        g.drawString("Transparency", xPosition + 3, tiy + 1, 20);
      }
      else {
        g.drawString(Integer.toHexString(colors[selectedColorBoxIndex].getColor()),
                     xPosition + 3, tiy + 1, 20);
      }
    }
    else if (keyActionOwner == KEYOWNER_TEXTINPUT) {
      int x = xPosition + 3, y = tiy + 1, w = 16, h = textInputHeight - 2;
      for (int i = 0; i < 6; i++) {
        if (textCurserPos == i) {
          g.setColor(255, 0, 0);
          g.fillRect(x + i * w, y, w, h);
        }
        g.setColor(0);
        g.drawString(Integer.toHexString(colorDisp[i]), x + i * w, y, 20);
      }
    }
  }
  private void paintFrame(Graphics g){
    g.setColor(COLOR_GRAY);
    g.drawRect(xPosition,yPosition+mainBarHeight,getWidth()-1,getHeight()-mainBarHeight-1);
    g.setColor(COLOR_WHITE);
    g.drawRect(xPosition+1,yPosition+mainBarHeight+1,getWidth()-3,getHeight()-mainBarHeight-3);
    g.setColor(COLOR_BLUE);
    g.fillRect(xPosition,yPosition,getWidth(),mainBarHeight);
//    g.setColor(COLOR_WHITE);//标题
//    g.drawString(getTitle(),xPosition+1,yPosition+1,20);
  }
  private void drawTrans(Graphics g,int x,int y,int w,int h){
    g.setColor(COLOR_GRAY);
    g.fillRect(x    ,y    ,w/2,h/2);
    g.fillRect(x+w/2,y+h/2,w/2,h/2);
    g.setColor(COLOR_WHITE);
    g.fillRect(x+w/2,y    ,w/2,h/2);
    g.fillRect(x    ,y+h/2,w/2,h/2);
  }
  private void setColorBoxsPosistion(){

    cbpaw = getColorBoxPaintAreaWidth();
    colorsStartX = (cbpaw % colorBoxWidth) / 2 + getColorBoxPaintAreaX(); //居中
    cbColumnCount = cbpaw / colorBoxWidth;
    cbpah = getColorBoxPaintAreaHeight();
    int wcount = getColorBoxPaintAreaWidth() / colorBoxWidth;
    int hcount = colors.length / wcount;
    if (colors.length % wcount != 0) {
      hcount++;
    }
    cbRowCount=hcount;
    if (hcount * colorBoxHeight > cbpah) {
      needVerticalScroll = true;
      colorsStartY = getColorBoxPaintAreaY(); //这里可能有问题
    }
    else {
      needVerticalScroll = false;
      colorsStartY = (cbpah % colorBoxHeight) / 2 + getColorBoxPaintAreaY();
    }


    for(int i=0;i<colors.length;i++){
      colors[i].x=i%cbColumnCount*colorBoxWidth+colorsStartX;
      colors[i].y=i/cbColumnCount*colorBoxHeight+colorsStartY;
    }
    selectedColorBoxIndex=0;
    textCurserPos=0;
    keyActionOwner=KEYOWNER_COLORBOX;//增加界面的尺寸调整功能时,这里要考虑一下,如果调整在PlatePanel使用了状态切换方法,这个状态更改会有问题
  }
  void setDispColor(int t){
    for(int i=0;i<6;i++){
        colorDisp[i]=(t>>((6-1-i)*4))%0x10;
      }
  }
  int getDispColor(){
    int t=0;
    for(int i=0;i<6;i++){
          t+=colorDisp[i]<<((6-1-i)*4);
          //System.out.println("i: "+Integer.toHexString(colorDisp[i]<<((numBit-1-i)*4)));
        }

    return t;
  }

}

⌨️ 快捷键说明

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