自定义各个域轴刻度标签的颜色

时间:2016-06-08 20:04:15

标签: java jasper-reports jfreechart

我有一个JFreeChart,我正在通过定制器(JRAbstractChartCustomizer)运行。我已经想出如何根据数据为单个条和项标签着色(例如,绿色为> 90%,黄色为75-90%,红色为<75%),方法是扩展BarRenderer并覆盖getItemLabelPaint(int row, int column)getItemPaint(int row, int column)。每个条形都有一个带有String标签的相应tick,因为域名是按名称而不是按数值。我需要一种方法来根据类似于我对条形图和项目标签着色的值来单独为刻度标签着色。

我在BarRenderer中覆盖哪种方法,或者我在JRChartCustomizer中做什么其他方法来单独覆盖颜色。

我正在为项目标签做些什么:(我想基本上做同样的事情,但是对于标签标签)

class CustomBarRenderer extends BarRenderer {

    private final Color COLOR_GREEN = new Color(0, 227, 0);
    private final Color COLOR_YELLOW = new Color(247, 210, 0);
    private final Color COLOR_RED = new Color(237, 26, 0);

    @Override
    public Paint getItemLabelPaint(int row, int col) {
        CategoryDataset cDataset = getPlot().getDataset();

        if (cDataset != null) {
            Number itemValue = cDataset.getValue(row, col);

            String rowKey = cDataset.getRowKey(row).toString();
            String colKey = cDataset.getColumnKey(col).toString();

            if (itemValue != null) {
                int intVal = itemValue.intValue();

                if (intVal > yellowHigh) {
                    return COLOR_GREEN;
                } else if (intVal >= yellowLow) {
                    return COLOR_YELLOW;
                } else {
                    return COLOR_RED;
                }
            }
        }

        // if all else fails...
        return super.getItemLabelPaint(row, col);
    }

    @Override
    public Paint getItemPaint(int row, int col) {
        ... similar to above ...
    }
}

1 个答案:

答案 0 :(得分:1)

您的图表的域轴刻度标签由CategoryAxis呈现。您可以使用setTickLabelPaint()按类别为标签着色。以下示例修改BarChartDemo1以使"Test"类别标签成为绿色阴影。

image

CategoryPlot plot = (CategoryPlot) chart.getPlot();
CategoryAxis domain = plot.getDomainAxis();
domain.setTickLabelPaint("Test", Color.green.darker());

为了更好地控制,您可以覆盖有权访问CustomBarRenderer引用的数据集的自定义getTickLabelPaint()中的CategoryAxis。现有的implementation使用Map<Category, Paint>作为查找表。 Map是私有的,但这种方法可以让您了解如何继续。