Существует очень мало примеров JasperReport только для Java (без XML).Я пытаюсь создать простую круговую диаграмму программно (на Java) и застреваю в некоторых реализациях.
Обратите внимание: Я использую iReport Designer уже несколько дней вДля того, чтобы лучше понять сгенерированный автоматически сгенерированный JRXML, и теперь поверьте, у меня есть довольно хорошо понятная круговая диаграмма JRXML.Но мне нужна здесь чистая реализация Java, которая вообще не использует XML.Поэтому использование JRXmlLoader
тоже не вариант, отчасти потому, что я просто хочу изучить Java API.
Позвольте мне начать с того, что я буду кормить круговую диаграмму из JRBeanArrayDataSource
, который используетмои собственные PieSlice
POJO:
public class PieSlice
{
private String label;
private Double value;
public PieSlice()
{
this("", -1);
}
public PieSlice(String lbl, Double val)
{
setLabel(lbl);
setValue(val);
}
public String getLabel()
{
return label;
}
public String getValue()
{
return value;
}
}
Затем я создам фабрику для источника данных и передам ее в JasperFillManager
следующим образом:
public class PieSliceFactory
{
private static String[] slices =
{
new PieSlice("Fizz", 75.0),
new PieSlice("Buzz", 25.0);
};
public static getSlices()
{
return ArrayList.asList(slices);
}
}
JasperReport jasperReport = JasperFillManager.fillReport(jasperDesign, new JRBeanArrayDataSource(PieSliceFactory.getSlices()));
Это должно заполнитькруговая диаграмма отчета с 2 срезами. Я борюсь с объектом JasperDesign. Обычно JRXML для поддержки этого будет выглядеть так:
<pieDataset>
<keyExpression><![CDATA[$F{PieSlice}.label]]></keyExpression>
<valueExpression><![CDATA[$F{PieSlice}.weight]]></valueExpression>
</pieDataset>
Таким образом, для каждой записи (бина), возвращаемой источником данных (в данном случае 2), свойство «label» этой записи подается на круговую диаграмму в качестве категории / ключа текущего среза, а «значение» этой записи подается на диаграмму в качестве значения текущего среза.
Моя проблема в том, чтоJava JasperDesign
API, кажется, не поддерживает это (по крайней мере, для новичка).Я ожидаю увидеть API, способный на что-то вроде следующего:
JRDesignChart piechart = new JRDesignChart();
JRDesignChartDataset pieDataset = new JRDesignChartDataset();
JRExpression pieLabelExrepssion, pieValueExpression;
pieLabelExpression = new JRExpression(java.lang.String, "$F{PieSlice}.label");
pieValueExpression = new JRExpression(java.lang.Double, "$F{PieSlice}.value");
pieDataset.setKeyExpression(pieLabelExpression);
pieDataset.setValueExpression(pieValueExpression();
piechart.addDataset(pieDataset);
Но, к моему удивлению, JRDesignChartDataset
не имеет методов / свойств для тегов <keyExpression>
и <valueExpression>
, присутствующих вJRXML.
Как мне это сделать? Какие JRDesign
классы / методы я должен использовать для сопоставления моих PieSlice
свойств (label
& value
) с <pieDataset>
выражения ключа / значения?
Заранее спасибо за любую помощь.