📄 platepanel.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 + -