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

📄 recordtab.java

📁 《神州》RPG游戏引擎
💻 JAVA
字号:
import java.util.*;
import javax.microedition.lcdui.*;


public class RecordTab
{
    private int bgColor;
    private int fontColor;
    private int highLightColor;
    private int darkTabColor;
    private int padding;
    private int rowIndex, rowIdx_X, rowIdx_Y, rowIdx_W, rowIdx_H;
    private int x,y,w,h;
    private Vector vc;
    private String[] tabName;
    private int tabIndex;
    private int[] saleCount;
    private String desc;

    int tOffset = 0;  //绘制道具内容显示的垂直偏移量
    int bhOffset = 0;  //内容区高度偏移量,说明文字超过一行时,内容区高度要缩小


    public RecordTab()
    {
        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 String getDesc()
    {
        return desc;
    }

    public void paint(Graphics g, int inStatus)
    {
        g.setFont(Style.font);

        drawTab(g);

        int by = y + Style.font.getHeight()*1 + padding*2;
        int bh = h - Style.font.getHeight()*1 - 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);
                rowIdx_X = x;
                rowIdx_Y = by+rowHeight*i+tOffset;
                rowIdx_W = w;
                rowIdx_H = rowHeight;
                g.fillRect(rowIdx_X, rowIdx_Y, rowIdx_W, rowIdx_H);
            }

            String strTemp = (String)vc.elementAt(i);

            g.setColor(fontColor);
            g.drawString(strTemp, x+padding*2, by+rowHeight*i+tOffset, Style.LT);

            String str = "";

            if (i == 2)
            {
                if(GameMIDlet.isSonic)   //声音
                    str = "开";
                else
                    str = "关";

                g.drawString(str, x + w/2 + padding*2 + 10,	 by + rowHeight*i + tOffset, Style.RT);
            }

            if (i == 3)
            {
                if(GameMIDlet.isVibratory)   //振动
                    str = "开";
                else
                    str = "关";

                g.drawString(str, x + w/2 + padding*2 + 10,	 by + rowHeight*i + tOffset, Style.RT);
            }
        }

        g.setClip(orgClipX, orgClipY, orgClipWidth, orgClipHeight);

        this.showDesc(g, this.getRowIndex(), by, bh);
    }

    private void showDesc(Graphics g, int lineIndex, int by, int bh)
    {
        switch (lineIndex)
        {
            case 0:     //保存进度
                desc = "保存进度";
                break;
            case 1:     //读取进度
                desc = "读取进度";
                break;
            case 2:     //音乐
                desc = "音乐";
                break;
            case 3:     //振动
                desc = "振动";
                break;
            case 4:     //退出游戏
                desc = "退出游戏";
                break;
            default:
                desc = "系统菜单";
        }
        //System.out.println(lineIndex);

        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);
            }
        }

    }

    public void addElement(String str)
    {
        if(vc == null)
            vc = new Vector();

        vc.addElement(str);
    }

    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 int getIdxRowX()
    {
        return rowIdx_X;
    }
    public int getIdxRowY()
    {
        return rowIdx_Y;
    }
    public int getIdxRowW()
    {
        return rowIdx_W;
    }
    public int getIdxRowH()
    {
        return rowIdx_H;
    }
    public Vector getVC()
    {
        return vc;
    }

    public int getFontColor()
    {
        return fontColor;
    }
    public void setFontColor(int fontColor)
    {
        this.fontColor = fontColor;
    }
    public void setSaleCount(int[] saleCount)
    {
        this.saleCount = saleCount;
    }
    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;
    }

}

⌨️ 快捷键说明

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