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

📄 sdachart.java

📁 很好的UI界面源码..还有自己的输入法,可以更换风格.可以学习和使用
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
/* * To change this template, choose Tools | Templates * and open the template in the editor. */package cn.sda.ui;import java.util.Vector;import javax.microedition.lcdui.Graphics;import javax.microedition.lcdui.Font;/** * * @author Administrator */public class SDAChart extends SDABaseControl {    private int borderColor = SDAConsts.clBlack;    private int scaleLineColor = SDAConsts.clFocusShadow;    private String titleText = "";    private int titleTextAlign = SDAConsts.alignCenter;    private boolean showTitleText = false;    private String footText = "";    private int footTextAlign = SDAConsts.alignCenter;    private boolean showFootText = false;    private String axisText = "";    private int axisTextAlign = SDAConsts.alignCenter;    private boolean showAxisText = false;    //柱图宽度    private int barChartWidth = 8;    //参考线颜色    private int refLineColor = SDAConsts.clFocusShadow;    private boolean showRefLine = true;    //列表(所有的series里面的x值都要各自排序)    private Vector seriesList = null;    //坐标排序    private Vector xValueList = null;    private Vector yValueList = null;    //Y最大值    private double maxYInt = 0;    //最值记录    private double maxXValue = 0;    private double minXValue = 0;    private double maxYValue = 0;    private double minYValue = 0;    //实际像素开始位置和区域大小    private int yStartPos = 0;    private int xStartPos = 0;    private int yLen = 0;    private int xLen = 0;    public SDAChart() {        super();        visible = true;        width = 200;        height = 160;        backColor=SDAConsts.clWhite;        seriesList = new Vector();        xValueList = new Vector();        yValueList = new Vector();    }    public void paint() {        if (!IsCanPaint()) {            return;        }        Graphics g = form.getGraphics();        SetClip(g);        g.setFont(getFont());        //变量        int thisWidth = getWidth();        int thisHeight = getHeight();        //背景        if (!transparent) {            g.setColor(backColor);            fillRect(g, 0, 0, thisWidth, thisHeight);        }        //外框        g.setColor(borderColor);        drawRect(g, 0, 0, thisWidth, thisHeight);        //画标尺        paintScale(g, canPaintScale());        //画数据        for (int i = 0; i < seriesList.size(); i++) {            if (((SDAChartSeries) seriesList.elementAt(i)).getChartType() == SDAChartSeries.ctLine) {                paintLineSeries(g, (SDAChartSeries) seriesList.elementAt(i));            }            if (((SDAChartSeries) seriesList.elementAt(i)).getChartType() == SDAChartSeries.ctBar) {                paintBarSeries(g, (SDAChartSeries) seriesList.elementAt(i));            }            if (((SDAChartSeries) seriesList.elementAt(i)).getChartType() == SDAChartSeries.ctPie) {                paintPieSeries(g, (SDAChartSeries) seriesList.elementAt(i));            }            if (((SDAChartSeries) seriesList.elementAt(i)).getChartType() == SDAChartSeries.ctPoint) {                paintPointSeries(g, (SDAChartSeries) seriesList.elementAt(i));            }        }        PaintChilds();    }    //判断是否可以画标尺    private boolean canPaintScale() {        boolean result = true;        for (int i = 0; i < seriesList.size(); i++) {            if (((SDAChartSeries) seriesList.elementAt(i)).getChartType() == SDAChartSeries.ctPie) {                result = false;                break;            }        }        return result;    }    //排序    private void sortValue() {        //各自Series排序(对x方向升序)        SDAChartSeries series = null;        SDAChartSeries.PointData pd = null;        SDAChartSeries.PointData pd1 = null;        int num = 0;        for (int i = 0; i < seriesList.size(); i++) {            series = (SDAChartSeries) seriesList.elementAt(i);            num = series.getDataCount();            for (int j = 0; j < num; j++) {                pd = (SDAChartSeries.PointData) series.getData(j);                for (int k = j + 1; k < num; k++) {                    pd1 = (SDAChartSeries.PointData) series.getData(k);                    if (pd.xValue > pd1.xValue) {                        series.dataList.setElementAt(pd, k);                        series.dataList.setElementAt(pd1, j);                        pd = (SDAChartSeries.PointData) series.getData(j);                    }                }            }        }        //所有x方向排序(升序)        xValueList.removeAllElements();        for (int i = 0; i < seriesList.size(); i++) {            series = (SDAChartSeries) seriesList.elementAt(i);            for (int j = 0; j < series.getDataCount(); j++) {                pd = (SDAChartSeries.PointData) series.getData(j);                xValueList.addElement(pd);            }        }        for (int i = 0; i < xValueList.size(); i++) {            pd = (SDAChartSeries.PointData) xValueList.elementAt(i);            for (int j = i + 1; j < xValueList.size(); j++) {                pd1 = (SDAChartSeries.PointData) xValueList.elementAt(j);                if (pd.xValue > pd1.xValue) {                    xValueList.setElementAt(pd, j);                    xValueList.setElementAt(pd1, i);                    pd = (SDAChartSeries.PointData) xValueList.elementAt(i);                }            }        }        //所有y方向排序(升序)        yValueList.removeAllElements();        for (int i = 0; i < seriesList.size(); i++) {            series = (SDAChartSeries) seriesList.elementAt(i);            for (int j = 0; j < series.getDataCount(); j++) {                pd = (SDAChartSeries.PointData) series.getData(j);                yValueList.addElement(pd);            }        }        for (int i = 0; i < yValueList.size(); i++) {            pd = (SDAChartSeries.PointData) yValueList.elementAt(i);            for (int j = i + 1; j < yValueList.size(); j++) {                pd1 = (SDAChartSeries.PointData) yValueList.elementAt(j);                if (pd.yValue > pd1.yValue) {                    yValueList.setElementAt(pd, j);                    yValueList.setElementAt(pd1, i);                    pd = (SDAChartSeries.PointData) yValueList.elementAt(i);                }            }        }    }    //乘方运算    private double getMulValue(int miValue) {        double result = 1;        if (miValue > 0) {            for (int i = 0; i < miValue; i++) {                result *= 10;            }        }        if (miValue < 0) {            for (int i = 0; i > miValue; i--) {                result /= 10;            }        }        return result;    }    //计算y方向标尺刻度    private double calYScale() {        Font ft = getFont();        //计算显示刻度(排序后)        double maxValue = yValueList.size() > 0 ? ((SDAChartSeries.PointData) yValueList.elementAt(yValueList.size() - 1)).yValue : 0;        double minValue = yValueList.size() > 0 ? ((SDAChartSeries.PointData) yValueList.elementAt(0)).yValue : 0;        if (maxValue < 0) {            maxValue = 0;        }        if (minValue > 0) {            minValue = 0;        //判断是否可以容纳的下文字(注意两边的空间)        }        int sint = (showTitleText ? ft.getHeight() : 0) + (showFootText ? ft.getHeight() : 0);        //首先判断1        double max = (int) (maxValue / 1) * 1;        double min = (int) (minValue / 1) * 1;        maxYInt = max;        //两边空余一个        int sideInt = (int) ((maxValue > max ? 1 : 0) + (minValue < min ? 1 : 0));        //所有的数量        int allInt = (int) (max - min + sideInt);        //最小单元        double minUnit = 1;        if (ft.getHeight() * allInt >= getHeight() - sint) {            //分割稠密(稀化)            for (int i = 0; i < 64; i++) {                minUnit = getMulValue(i);                max = (int) (maxValue / minUnit) * minUnit;                min = (int) (minValue / minUnit) * minUnit;                sideInt = (int) ((maxValue > max ? 1 : 0) + (minValue < min ? 1 : 0));                //所有的数量                allInt = (int) ((max - min + sideInt) / minUnit);                if (ft.getHeight() * allInt >= getHeight() - sint) {                    minUnit = 2 * getMulValue(i);                    max = (int) (maxValue / minUnit) * minUnit;                    min = (int) (minValue / minUnit) * minUnit;                    sideInt = (int) ((maxValue > max ? 1 : 0) + (minValue < min ? 1 : 0));                    //所有的数量                    allInt = (int) ((max - min + sideInt) / minUnit);                    if (ft.getHeight() * allInt >= getHeight() - sint) {                        minUnit = 5 * getMulValue(i);                        max = (int) (maxValue / minUnit) * minUnit;                        min = (int) (minValue / minUnit) * minUnit;                        sideInt = (int) ((maxValue > max ? 1 : 0) + (minValue < min ? 1 : 0));                        //所有的数量                        allInt = (int) ((max - min + sideInt) / minUnit);                        if (ft.getHeight() * allInt >= getHeight() - sint) {                            continue;                        } else {                            break;                        }                    } else {                        break;                    }                } else {                    break;                }            }        //获取到合适的        } else {            //分割太稀(稠化)            int iInt = 0;            int mulInt = 1;            for (int i = -1; i > -64; i--) {                iInt = i;                mulInt = 5;                minUnit = 5 * getMulValue(i);                max = (int) (maxValue / minUnit) * minUnit;                min = (int) (minValue / minUnit) * minUnit;                sideInt = (int) ((maxValue > max ? 1 : 0) + (minValue < min ? 1 : 0));                //所有的数量                allInt = (int) ((max - min + sideInt) / minUnit);                if (ft.getHeight() * allInt < getHeight() - sint) {                    mulInt = 2;                    minUnit = 2 * getMulValue(i);                    max = (int) (maxValue / minUnit) * minUnit;                    min = (int) (minValue / minUnit) * minUnit;                    sideInt = (int) ((maxValue > max ? 1 : 0) + (minValue < min ? 1 : 0));                    //所有的数量                    allInt = (int) ((max - min + sideInt) / minUnit);                    if (ft.getHeight() * allInt < getHeight() - sint) {                        mulInt = 1;                        minUnit = getMulValue(i);                        max = (int) (maxValue / minUnit) * minUnit;                        min = (int) (minValue / minUnit) * minUnit;                        sideInt = (int) ((maxValue > max ? 1 : 0) + (minValue < min ? 1 : 0));                        //所有的数量                        allInt = (int) ((max - min + sideInt) / minUnit);                        if (ft.getHeight() * allInt < getHeight() - sint) {                            continue;                        } else {                            break;                        }                    } else {                        break;                    }                } else {                    break;                }            }            if (mulInt == 5) {                mulInt = 1;            }            if (mulInt == 2) {                mulInt = 5;            }            minUnit = mulInt * getMulValue(iInt + 1);        }        maxYValue = maxValue > max ? max + minUnit : max;        minYValue = minValue < min ? min - minUnit : min;        return minUnit;    }    //计算x方向标尺刻度    private double calXScale() {        Font ft = getFont();        //计算显示刻度(排序后)        double maxValue = xValueList.size() > 0 ? ((SDAChartSeries.PointData) xValueList.elementAt(xValueList.size() - 1)).xValue : 0;        double minValue = xValueList.size() > 0 ? ((SDAChartSeries.PointData) xValueList.elementAt(0)).xValue : 0;        //判断是否可以容纳的下文字(注意两边的空间)        int sint = (showAxisText ? ft.charWidth('x') : 0) + (ft.stringWidth(String.valueOf(maxYInt)));        //首先判断1        double max = (int) (maxValue / 1) * 1;        double min = (int) (minValue / 1) * 1;        //两边空余一个        int sideInt = (int) ((maxValue > max ? 1 : 0) + (minValue < min ? 1 : 0));        //所有的数量        int allInt = (int) (max - min + sideInt);        //最小单元        double minUnit = 1;        if (ft.stringWidth(String.valueOf(max)) * allInt >= getWidth() - sint) {            //分割稠密(稀化)            for (int i = 0; i < 64; i++) {                minUnit = getMulValue(i);                max = (int) (maxValue / minUnit) * minUnit;                min = (int) (minValue / minUnit) * minUnit;                sideInt = (int) ((maxValue > max ? 1 : 0) + (minValue < min ? 1 : 0));                //所有的数量                allInt = (int) ((max - min + sideInt) / minUnit);                if (ft.stringWidth(String.valueOf(max)) * allInt >= getWidth() - sint) {                    minUnit = 2 * getMulValue(i);                    max = (int) (maxValue / minUnit) * minUnit;

⌨️ 快捷键说明

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