📄 shoptab.java
字号:
import java.util.*;
import javax.microedition.lcdui.*;
public class ShopTab
{
private int bgColor;
private int fontColor;
private int highLightColor;
private int darkTabColor;
private int padding;
private int rowIndex;
private int x,y,w,h;
private Vector vc;
private String[] tabName;
private int tabIndex;
private int[] saleCount;
public void setSaleCount(int[] saleCount) {
this.saleCount = saleCount;
}
int tOffset = 0; //绘制道具内容显示的垂直偏移量
int bhOffset = 0; //内容区高度偏移量,说明文字超过一行时,内容区高度要缩小
public int getPadding()
{
return padding;
}
public void setPadding(int padding) {
this.padding = padding;
}
public int getRowIndex() {
return rowIndex;
}
public void setRowIndex(int rowIndex) {
this.rowIndex = rowIndex;
}
public int getDarkTabColor() {
return darkTabColor;
}
public void setDarkTabColor(int darkTabColor) {
this.darkTabColor = darkTabColor;
}
public int getTabIndex() {
return tabIndex;
}
public void setTabIndex(int tabIndex) {
this.tabIndex = tabIndex;
}
public String[] getTabName() {
return tabName;
}
public void setTabName(String[] tabName) {
this.tabName = tabName;
}
public ShopTab()
{
fontColor = 0x000000;
darkTabColor = 0x9EB88A;
padding = 3;
rowIndex = -1;
}
public int getHighLightColor() {
return highLightColor;
}
public void setHighLightColor(int highLightColor) {
this.highLightColor = highLightColor;
}
private int getTabBeforeSpace(int index)
{
int beforeSpace = 0;
for(int i=0;i<index;i++)
{
beforeSpace+=Style.font.stringWidth(tabName[i])+6;
}
return beforeSpace;
}
private void drawTab(Graphics g)
{
//先画未选中的tab
for(int i=0; tabName!=null && i<tabName.length;i++)
{
if(tabIndex!=i)
{
g.setColor(darkTabColor);
g.fillRoundRect(x+getTabBeforeSpace(i),y+padding,Style.font.stringWidth(tabName[i])+padding*2,Style.font.getHeight()+padding*2,2,2);
g.setColor(0x000000);
g.drawString(tabName[i],x+getTabBeforeSpace(i)+padding,y+padding*2,Style.LT);
}
}
//画下白线
g.setColor(0xFFFFFF);
g.drawLine(x,y+Style.font.getHeight()+padding*2,x+w,y+Style.font.getHeight()+padding*2);
//画选中的tab
g.setColor(bgColor);
g.fillRoundRect(x+getTabBeforeSpace(tabIndex),y,Style.font.stringWidth(tabName[tabIndex])+padding*2,Style.font.getHeight()+padding*2,2,2);
g.setColor(0xFFFFFF);
g.drawRoundRect(x+getTabBeforeSpace(tabIndex),y,Style.font.stringWidth(tabName[tabIndex])+padding*2,Style.font.getHeight()+padding*2,2,2);
//g.setColor(0xFFFFFF);
//g.drawLine(x,y+Style.font.getHeight()+padding*2,x+w,y+Style.font.getHeight()+padding*2);
g.setColor(0x000000);
g.drawLine(x+getTabBeforeSpace(tabIndex)+Style.font.stringWidth(tabName[tabIndex])+padding*2,y+1,x+getTabBeforeSpace(tabIndex)+Style.font.stringWidth(tabName[tabIndex])+padding*2,y+Style.font.getHeight()+padding*2-1);
g.setColor(bgColor);
g.drawLine(x+getTabBeforeSpace(tabIndex)+1,y+Style.font.getHeight()+padding*2,x+getTabBeforeSpace(tabIndex)+Style.font.stringWidth(tabName[tabIndex])+padding*2-1,y+Style.font.getHeight()+padding*2);
g.setColor(0x000000);
g.drawString(tabName[tabIndex],x+getTabBeforeSpace(tabIndex)+padding,y+padding,Style.LT);
}
public void nextRow()
{
if(vc==null || vc.size()==0)
{
rowIndex=-1;
return;
}
if(rowIndex<vc.size()-1)
{
rowIndex++;
}
}
public void prevRow()
{
if(vc==null || vc.size()==0)
{
rowIndex=-1;
return;
}
if(rowIndex>-1)
{
rowIndex--;
}
}
public void paint(Graphics g, int inShopStatus)
{
g.setFont(Style.font);
drawTab(g);
/*
* 绘制title
*/
int titleX = x;
int titleY = y+Style.font.getHeight()+padding*2+1;
int titleW = w;
int titleH = Style.font.getHeight();
g.setColor(bgColor-0x111111);
g.fillRect(titleX,titleY,titleW,titleH);
g.setColor(0xFFFFFF);
g.drawLine(titleX,titleY,titleX,titleY+titleH);
//g.drawLine(titleX,titleY,titleX+titleW,titleY);
g.setColor(0x00000);
g.drawLine(titleX+titleW,titleY,titleX+titleW,titleY+titleH);
g.setColor(0x00000);
g.drawString("品名", titleX + padding*2, titleY , Style.LT);
g.drawString("单价", titleX + titleW/2 + 30, titleY , Style.RT);
g.drawString("数量", titleX + titleW - padding, titleY , Style.RT);
int by = y + Style.font.getHeight()*2 + padding*2;
int bh = h - Style.font.getHeight()*2 - padding*2;
g.setColor(bgColor);
g.fillRect(x,by+1,w,bh+bhOffset-1);
g.setColor(0x000000);
g.drawLine(x,by+bh+bhOffset,x+w,by+bh+bhOffset);
g.drawLine(x+w,by,x+w,by+bh+bhOffset);
g.setColor(0xFFFFFF);
g.drawLine(x,by,x,by+bh+bhOffset);
//int row=0;
int rowHeight = Style.font.getHeight();
//取得原先的绘制区域
int orgClipX = g.getClipX();
int orgClipY = g.getClipY();
int orgClipWidth = g.getClipWidth();
int orgClipHeight = g.getClipHeight();
//计算偏移量
if(rowIndex>=0 && vc!=null && rowIndex<vc.size())
{
int currentY = by+rowHeight*rowIndex+tOffset;
if(currentY+rowHeight>by+bh+bhOffset) //超过最下面,减偏移量
{
tOffset -= currentY+rowHeight-(by+bh+bhOffset);
}
else if(currentY<by) //少于最上面,加偏移量
{
tOffset += by-currentY;
}
}
for(int i=0; vc!=null && i<vc.size();i++)
{
g.setClip(x, by+1, w, bh+bhOffset-2);
if(i==rowIndex)
{
g.setColor(highLightColor);
g.fillRect(x, by+rowHeight*i+tOffset, w, rowHeight);
}
Mat mat=(Mat)vc.elementAt(i);
g.setColor(fontColor);
g.drawString(mat.getName(), x+padding*2, by+rowHeight*i+tOffset, Style.LT);
g.drawString(String.valueOf(mat.getPrice()),x+w/2+30,by+rowHeight*i+tOffset,Style.RT);
String strTmp = "";
if (this.tabIndex==0) //买
strTmp = String.valueOf(mat.getAmount());
else if (this.tabIndex==1) //卖
{
//strTmp = String.valueOf(mat.getSoldAmount());
//strTmp = strTmp + "/" + mat.getStoredAmount();
if(saleCount!=null)strTmp = saleCount[i]+"/"+mat.getAmount();
}
g.drawString(strTmp,
x + w - Style.font.stringWidth(strTmp) - padding * 2,
by + rowHeight * i + tOffset, Style.LT); //painting the number to show
}
g.setClip(orgClipX,orgClipY,orgClipWidth,orgClipHeight);
if (inShopStatus != Canvas1.SHOPSTATUS_CONFIRM) //25 is ShoppingConfirm Status
{
/*显示道具说明*/
if(vc!=null && rowIndex>=0 && rowIndex<vc.size())
{
Mat mat=(Mat)vc.elementAt(rowIndex);
String desc = mat.getDesc();
if(desc != null && !desc.equals(""))
{
int descW = w;
String[] descArr=Tools.splitString(desc,descW-padding*2);
bhOffset=0;
if(descArr!=null && descArr.length>0)
{
bhOffset=-(Style.font.getHeight()*(descArr.length));
}
else
{
bhOffset=0;
}
int descX = x;
int descY = by+bh+2+bhOffset;
int descStringW = Style.font.stringWidth(desc);
int descH = Style.font.getHeight()*descArr.length+2;
g.setColor(bgColor);
g.fillRect(descX,descY,descW,descH); //对话框背景色
g.setColor(0xFFFFFF);
g.drawLine(descX,descY,descX+descW,descY);
g.drawLine(descX,descY,descX,descY+descH);
g.setColor(0x000000);
g.drawLine(descX,descY+descH,descX+descW,descY+descH);
g.drawLine(descX+descW,descY,descX+descW,descY+descH);
g.setColor(0x000000);
for(int i=0;descArr!=null && i<descArr.length;i++)
{
g.drawString(descArr[i],descX+padding,descY+Style.font.getHeight()*i+1,Style.LT);
}
}
}
/*显示当cursor在title时的说明*/
if (rowIndex == -1)
{
String desc = "左右键设置购买单位";
int descW = w;
String[] descArr = Tools.splitString(desc,descW-padding*2);
bhOffset = 0;
if(descArr != null && descArr.length > 0)
{
bhOffset = -(Style.font.getHeight()*(descArr.length));
}
else
{
bhOffset=0;
}
int descX = x;
int descY = by+bh+2+bhOffset;
int descStringW = Style.font.stringWidth(desc);
int descH = Style.font.getHeight()*descArr.length + 2;
g.setColor(bgColor);
g.fillRect(descX,descY,descW,descH); //对话框背景色
g.setColor(0xFFFFFF);
g.drawLine(descX,descY,descX+descW,descY);
g.drawLine(descX,descY,descX,descY+descH);
g.setColor(0x000000);
g.drawLine(descX,descY+descH,descX+descW,descY+descH);
g.drawLine(descX+descW,descY,descX+descW,descY+descH);
g.setColor(0x000000);
for(int i=0;descArr!=null && i<descArr.length;i++)
{
g.drawString(descArr[i],descX+padding,descY+Style.font.getHeight()*i+1,Style.LT);
}
}
}else{
//draw confirm Cmd button
String desc = "";
int descW = w;
String[] descArr = Tools.splitString(desc, descW-padding*2);
bhOffset = 0;
if(descArr != null && descArr.length > 0)
{
bhOffset = -(Style.font.getHeight()*(descArr.length));
}
else
{
bhOffset=0;
}
int descX = x;
int descY = by+bh+2+bhOffset;
int descStringW = Style.font.stringWidth(desc);
int descH = Style.font.getHeight() * descArr.length + 2;
g.setColor(bgColor);
g.fillRect(descX,descY,descW,descH); //对话框背景色
int btnX1 = descX + descW/2;
int btnX2 = btnX1 + descW/4 - padding;
int btnX3 = btnX2 + padding;
int btnX4 = btnX3 + descW/4;
if (Canvas1.shopBtnCursor == 0)
{
g.setColor(highLightColor);
g.fillRect(btnX1, descY, btnX2-btnX1, descH);
}else{
g.setColor(highLightColor);
g.fillRect(btnX3,descY,btnX4-btnX3,descH);
}
g.setColor(0xFFFFFF);
g.drawLine(btnX1,descY,btnX2,descY);
g.drawLine(btnX1,descY,btnX1,descY+descH);
g.drawLine(btnX3,descY,btnX4,descY);
g.drawLine(btnX3,descY,btnX3,descY+descH);
g.setColor(0x000000);
g.drawLine(btnX1,descY+descH,btnX2,descY+descH);
g.drawLine(btnX2,descY,btnX2,descY+descH);
g.drawLine(btnX3,descY+descH,btnX4,descY+descH);
g.drawLine(descX+descW,descY,descX+descW,descY+descH);
g.setColor(0x000000);
g.drawString("确定", btnX1 + (btnX2-btnX1)/2 - Style.font.stringWidth("确定")/2, descY + descH/2 - Style.font.getHeight()/2 + 1, Style.LT);
g.drawString("取消", btnX3 + (btnX4-btnX3)/2 - Style.font.stringWidth("取消")/2, descY + descH/2 - Style.font.getHeight()/2 + 1, Style.LT);
}
}
public int getBgColor() {
return bgColor;
}
public void setBgColor(int bgColor) {
this.bgColor = bgColor;
}
public int getH() {
return h;
}
public void setH(int h) {
this.h = h;
}
public int getW() {
return w;
}
public void setW(int w) {
this.w = w;
}
public void setPosition(int x,int y)
{
this.x=x;
this.y=y;
}
public int getX() {
return x;
}
public int getY() {
return y;
}
public Vector getVC() {
return vc;
}
public void addElement(Mat mat)
{
if(vc==null)
vc=new Vector();
vc.addElement(mat);
}
public int getFontColor() {
return fontColor;
}
public void setFontColor(int fontColor) {
this.fontColor = fontColor;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -