带有 Jasper Report 条形图的条形顶部的自定义值标签
Custom value labels on top of bars with Jasper Report bar charts
我在 Jasper Studio 中定义了一个条形图,它生成了这样的结果:
条形顶部的值重叠。我想要:
- 减小标签的文本大小并将其限制为小数点后两位。
- 更改标签的垂直位置以避免重叠。
我不确定,但我认为 Jasper Studio 不允许对其进行配置。
我看过代码实现 JRChartCustomizer
但我不知道如何修改标签的文本或位置。
编辑
我试过这种方法:
public void customize(JFreeChart fc, JRChart jrc) {
CategoryPlot catPlot = fc.getCategoryPlot();
if (jrc.getDataset() instanceof JRFillChartDataset) {
JRFillChartDataset jrFillChartDataset = (JRFillChartDataset) jrc.getDataset();
CategoryLabelGenerator categoryLabelGenerator = (CategoryLabelGenerator) jrFillChartDataset.getLabelGenerator();
categoryLabelGenerator.getNumberFormat().setMaximumFractionDigits(1);
但是没有用,因为 getLabelGenerator() 在每次调用时都会创建一个新的 CategoryLabelGenerator,因此为其 NumberFormat 实例设置值毫无意义。
最后我是这样得到的:
@Override
public void customize(JFreeChart fc, JRChart jrc) {
CategoryPlot catPlot = fc.getCategoryPlot();
final CategoryItemRenderer renderer = catPlot.getRenderer();
Font font = renderer.getBaseItemLabelFont();
Font font2 = font.deriveFont(3f);
renderer.setBaseItemLabelFont(font2);
renderer.setBaseItemLabelGenerator(new CategoryLabelGenerator(null) {
private static final long serialVersionUID = 549073036018846176L;
@Override
public String generateLabel(CategoryDataset dataset, int row, int column) {
Number value = dataset.getValue(row, column);
if (value != null) {
NumberFormat nf = NumberFormat.getPercentInstance();
nf.setMinimumIntegerDigits(1);
nf.setMaximumFractionDigits(2);
return nf.format(value.doubleValue() / 100);
}
return null;
}
});
}
我在 Jasper Studio 中定义了一个条形图,它生成了这样的结果:
条形顶部的值重叠。我想要:
- 减小标签的文本大小并将其限制为小数点后两位。
- 更改标签的垂直位置以避免重叠。
我不确定,但我认为 Jasper Studio 不允许对其进行配置。
我看过代码实现 JRChartCustomizer
但我不知道如何修改标签的文本或位置。
编辑
我试过这种方法:
public void customize(JFreeChart fc, JRChart jrc) {
CategoryPlot catPlot = fc.getCategoryPlot();
if (jrc.getDataset() instanceof JRFillChartDataset) {
JRFillChartDataset jrFillChartDataset = (JRFillChartDataset) jrc.getDataset();
CategoryLabelGenerator categoryLabelGenerator = (CategoryLabelGenerator) jrFillChartDataset.getLabelGenerator();
categoryLabelGenerator.getNumberFormat().setMaximumFractionDigits(1);
但是没有用,因为 getLabelGenerator() 在每次调用时都会创建一个新的 CategoryLabelGenerator,因此为其 NumberFormat 实例设置值毫无意义。
最后我是这样得到的:
@Override
public void customize(JFreeChart fc, JRChart jrc) {
CategoryPlot catPlot = fc.getCategoryPlot();
final CategoryItemRenderer renderer = catPlot.getRenderer();
Font font = renderer.getBaseItemLabelFont();
Font font2 = font.deriveFont(3f);
renderer.setBaseItemLabelFont(font2);
renderer.setBaseItemLabelGenerator(new CategoryLabelGenerator(null) {
private static final long serialVersionUID = 549073036018846176L;
@Override
public String generateLabel(CategoryDataset dataset, int row, int column) {
Number value = dataset.getValue(row, column);
if (value != null) {
NumberFormat nf = NumberFormat.getPercentInstance();
nf.setMinimumIntegerDigits(1);
nf.setMaximumFractionDigits(2);
return nf.format(value.doubleValue() / 100);
}
return null;
}
});
}