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

📄 shoptab.java

📁 《神州》RPG游戏引擎
💻 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 + -