Пример круговой диаграммы JasperReport - PullRequest
5 голосов
/ 10 ноября 2011

Я новичок в JasperReports и медленно пробираюсь через основы. У меня есть ситуация, когда я не хочу заполнять круговую диаграмму данными, управляемыми БД (через так называемый источник данных ). Я хочу предоставить всю информацию, необходимую для заполнения круговой диаграммы, из хэш-карты Java, переданной в JasperFillManager во время выполнения.

Это будет включать параметры для маркировки срезов на круговой диаграмме, установки их цветов и определения их веса / значений (размера срезов). Итак, в какой-то момент в моем Java-коде я бы написал что-то вроде:

HashMap<String,Object> jrParams = new HashMap<String,Object>();

jpParams.put("slice_1_label", "Red Team");
jpParams.put("slice_1_color", Color.RED);
jpParams.put("slice_1_value", 67.0);
jpParams.put("slice_2_label", "Blue Team");
jpParams.put("slice_2_color", Color.BLUE);
jpParams.put("slice_2_value", 33.0);

// ... some other code

JasperFillManager.fillReport(jasperDesign, jrParams);

Цель, которую я пытаюсь достичь, состоит в том, чтобы иметь круговую диаграмму с 2 срезами; красный срез "Red Team", занимающий 67% пирога, и синий срез "Blue Team", занимающий 33%.

Теперь мне нужна помощь в «соединении точек» между моей хэш-картой и JRXML / JasperDesign.

Может ли кто-нибудь показать мне (или просто помочь мне) узнать, какого рода <pieChart> JRXML мне нужно написать, чтобы моя jrParam хеш-карта заполнила круговую диаграмму параметрами времени выполнения? Я сделал лучшую попытку ниже, но просто изо всех сил пытаюсь понять все это.

<pieChart>
    <chart isShowLegend="true">
        <reportElement x="10" y="10" width="300" height="300"/>
        <chartTitle>
            <titleExpression><![CDATA[My First JR Pie Chart]]></titleExpression>
        </chartTitle>
    </chart>
    <pieDataset>

        <!-- Here is where I believe I need to put my two slices; not sure how -->

    </pieDataset>
    <piePlot>
        <plot backcolor="#8BA870"/>
        <itemLabel color="#000000"/>
    </piePlot>
</pieChart>

Заранее спасибо за любую помощь / разъяснения!

Ответы [ 2 ]

5 голосов
/ 10 ноября 2011

zharvey,

Поскольку вы довольно новичок в JasperReport, я надеюсь, что вы используете инструмент iReport Designer. Создайте круговую диаграмму из одного из примеров шаблонов, которые есть у дизайнера iReport, а затем попытайтесь изучить сгенерированный JRXML. Существует очень простой пример, который вы можете посмотреть, перейдя в iReport-> Help-> Samples-> Charts

Мой второй совет для вас - использовать Java-бины или POJO в качестве источника данных (просто основываясь на коде, который вы разместили). Я смотрю на ваш пример кода, где вы создаете метку карты цвета, цвета и значения. Было бы неплохо и легко, если бы у вас был простой старый класс Java-бина со всеми этими тремя свойствами в качестве переменной экземпляра? Это также будет легко для вашего отчета, потому что вы можете создать коллекцию объектов bean, к которым можно легко получить доступ и использовать через JRBeanDataSource. Я чувствую, что это сделает ваш код немного чище и проще в обслуживании. Привет! * * 1005

0 голосов
/ 14 декабря 2011

Посмотрите, поможет ли вам этот код! Я создал гистограмму, используя приведенный ниже код, который использует javabean в качестве источника данных. Если вы хотите пройти через мой jrml, я также могу это предоставить.

public class App{
    String cname;
    int mark;
    public void setCname(String cname){
        this.cname = cname;
    }
    public void setMark(int mark){
        this.mark = mark;
    }
    public String getCname(){
        return cname;
    }
    public int getMark(){
        return mark;
    }
    public static ArrayList<App> getDetails() {
        ArrayList<App> clist= new ArrayList<App>();
        App c1 = new App();
        c1.setCname("English");
        c1.setMark(58);
        clist.add(c1);
        c1 = new App();
        c1.setCname("Social  Studies");
        c1.setMark(68);
        clist.add(c1);
        c1 = new App();
        c1.setCname("Culture");
        c1.setMark(78);
        clist.add(c1);
        c1 = new App();
        c1.setCname("Maths");
        c1.setMark(78);
        clist.add(c1);
        c1 = new App();
        c1.setCname("Physics");
        c1.setMark(100);
        clist.add(c1);
        return(clist);
    }

    public static void main( String[] args ) {
        JasperReport jasperReport;
        JasperPrint jasperPrint;
        Map<String, Object> param = new HashMap<String, Object>();
        try {
            String sourceFileName = ".jrxml";
            jasperReport = JasperCompileManager.compileReport(sourceFileName);
            jasperPrint = JasperFillManager.fillReport(jasperReport,param,new JRBeanCollectionDataSource(getDetails()));
            JasperExportManager.exportReportToPdfFile(jasperPrint, ".pdf");
        }
        catch(Exception e){
        }
        System.out.println( "Hello World!" );
    }
}
...