Gerando Relatórios com Gráficos na sua aplicação JAVA

Quem já tentou gerar relatórios com gráficos em suas aplicações java? Muitos já conseguiram outros sem sucesso, complicado em? Existe uma biblioteca chamada JfreeChart, que permite ao desenvolvedor de aplicações java gerar gráficos com facilidade e com qualidade profissional.

PASSO 1: Baixe a biblioteca JfreeChart , extraia o arquivo em um diretório de sua preferencia, abra sua IDE preferida, no meu caso vou utilizar a IDE eclipse, crie um projeto.

Passo 2: Clique com o botão direito do mouse em cima do seu projeto, Build Path, Configure Build Patch…

 img1

abrirá uma janela, selecione Libraries, escolha a opção Add External JARs…, vá até o diretório onde você extraiu o JfreeChart, lib, e selecione os seguintes .JAR (jcommon-1.0.17.jar e jfreechart-1.0.14.jar) ficando da seguinte forma:

img2

Passo 3: Crie uma classe chamada PieChart, e coloque o seguinte código:

import javax.swing.JFrame;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PiePlot3D;
import org.jfree.data.general.DefaultPieDataset;
import org.jfree.data.general.PieDataset;
import org.jfree.util.Rotation;

public class PieChart extends JFrame {

	private static final long serialVersionUID = 1L;

	public PieChart(String applicationTitle, String chartTitle) {
		super(applicationTitle);
		// Isso irá criar o conjunto de dados
		PieDataset dataset = createDataset();

		// com base no conjunto de dados que criamos o gráfico
		JFreeChart chart = createChart(dataset, chartTitle);

		// vamos colocar o gráfico em um painel
		ChartPanel chartPanel = new ChartPanel(chart);

		// default tamanho
		chartPanel.setPreferredSize(new java.awt.Dimension(500, 270));

		// adiciona a nossa aplicação
		setContentPane(chartPanel);

	}

	/**
	 * Cria um conjunto de dados de amostra 
	 */

	private PieDataset createDataset() {
		DefaultPieDataset result = new DefaultPieDataset();
		result.setValue("Linux", 29);
		result.setValue("Mac", 20);
		result.setValue("Windows", 51);
		return result;

	}

	/**
	 * Cria um gráfico 
	 */

	private JFreeChart createChart(PieDataset dataset, String title) {

		JFreeChart chart = ChartFactory.createPieChart3D(title, // título / gráfico 
				dataset, // dados 
				true, // include lenda
				true, false);

		PiePlot3D plot = (PiePlot3D) chart.getPlot();
		plot.setStartAngle(290);
		plot.setDirection(Rotation.CLOCKWISE);
		plot.setForegroundAlpha(0.5f);
		return chart;

	}

}

Crie uma outra class chamada de Main e adicione o seguinte código:

public class Main {

	   public static void main(String[] args) {
	          PieChart demo = new PieChart("Comparação", "Qual sistema operacional você está usando?");
	          demo.pack();
	          demo.setVisible(true);
	      }
	}

Agora é só executar e ver o gráfico que foi gerado…

img3

estude as bibliotecas e gere com facilidade os diversos gráficos que a API lhe permite, esse é apenas um exemplo existem outros exemplos no site da API JFreeChart.

Até a próxima.

Francisco de Assis

Servo de DEUS, Mestrando em Ciências da Computação (UFPE) Pós-Graduado em Docência do Ensino Superior (IDJ/UVA), Graduando em Automação Industrial (IFCE), Graduado em Analise e Desenvolvimento de Sistemas (UNILEÃO), casado com a mulher mais maravilhosa, Tamires Alencar e amante Python, Java, Games, Eletrônica, Robótica, Violão, Aviação...

7 thoughts on “Gerando Relatórios com Gráficos na sua aplicação JAVA

  1. Francisco, parabéns pela postagem!

    Gerei um relatório que exibe vários gráficos, no ireport ele funciona normalmente, mas quando gero o arquivo .jasper e o chamo pelo netbeans dá esse erro:

    jan 21, 2017 10:23:12 AM net.sf.jasperreports.engine.fill.JRFillSubreport prepare
    GRAVE: Fill 1: exception
    java.lang.ClassCastException: org.jfree.chart.axis.NumberTickUnitSource cannot be cast to org.jfree.chart.axis.TickUnits
    at net.sf.jasperreports.charts.util.ChartUtil.createStandardTickUnits(ChartUtil.java:329) at net.sf.jasperreports.charts.util.ChartUtil.createStandardTickUnits(ChartUtil.java:329)
    at net.sf.jasperreports.engine.fill.DefaultChartTheme.calculateTickUnits(DefaultChartTheme.java:2200)
    at net.sf.jasperreports.engine.fill.DefaultChartTheme.setAxisBounds(DefaultChartTheme.java:2116)
    at net.sf.jasperreports.engine.fill.DefaultChartTheme.configureAxis(DefaultChartTheme.java:599)
    at net.sf.jasperreports.engine.fill.DefaultChartTheme.createLineChart(DefaultChartTheme.java:1022)
    at net.sf.jasperreports.engine.fill.DefaultChartTheme.createChart(DefaultChartTheme.java:289)
    at net.sf.jasperreports.engine.fill.JRFillChart.evaluateChart(JRFillChart.java:843)
    at net.sf.jasperreports.engine.fill.JRFillChart.evaluateRenderer(JRFillChart.java:808)
    at net.sf.jasperreports.engine.fill.JRFillChart.evaluate(JRFillChart.java:797)
    at net.sf.jasperreports.engine.fill.JRFillElementContainer.evaluate(JRFillElementContainer.java:259)
    at net.sf.jasperreports.engine.fill.JRFillBand.evaluate(JRFillBand.java:455)
    at net.sf.jasperreports.engine.fill.JRHorizontalFiller.fillFixedBand(JRHorizontalFiller.java:2174)
    at net.sf.jasperreports.engine.fill.JRHorizontalFiller.fillFixedBand(JRHorizontalFiller.java:2168)
    at net.sf.jasperreports.engine.fill.JRHorizontalFiller.fillPageFooter(JRHorizontalFiller.java:1098)
    at net.sf.jasperreports.engine.fill.JRHorizontalFiller.fillSummaryNoLastFooterSamePage(JRHorizontalFiller.java:1228)
    at net.sf.jasperreports.engine.fill.JRHorizontalFiller.fillSummary(JRHorizontalFiller.java:1123)
    at net.sf.jasperreports.engine.fill.JRHorizontalFiller.fillReportEnd(JRHorizontalFiller.java:332)
    at net.sf.jasperreports.engine.fill.JRHorizontalFiller.fillReport(JRHorizontalFiller.java:164)
    at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:909)
    at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:822)
    at net.sf.jasperreports.engine.fill.JRFillSubreport.fillSubreport(JRFillSubreport.java:651)
    at net.sf.jasperreports.engine.fill.JRSubreportRunnable.run(JRSubreportRunnable.java:59)
    at net.sf.jasperreports.engine.fill.AbstractThreadSubreportRunner.run(AbstractThreadSubreportRunner.java:203)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)

    Exception in thread “AWT-EventQueue-0” java.lang.ClassCastException: org.jfree.chart.axis.NumberTickUnitSource cannot be cast to org.jfree.chart.axis.TickUnits
    at net.sf.jasperreports.charts.util.ChartUtil.createStandardTickUnits(ChartUtil.java:329)
    at net.sf.jasperreports.engine.fill.DefaultChartTheme.calculateTickUnits(DefaultChartTheme.java:2200)
    at net.sf.jasperreports.engine.fill.DefaultChartTheme.setAxisBounds(DefaultChartTheme.java:2116)
    at net.sf.jasperreports.engine.fill.DefaultChartTheme.configureAxis(DefaultChartTheme.java:599)
    at net.sf.jasperreports.engine.fill.DefaultChartTheme.createLineChart(DefaultChartTheme.java:1022)
    at net.sf.jasperreports.engine.fill.DefaultChartTheme.createChart(DefaultChartTheme.java:289)
    at net.sf.jasperreports.engine.fill.JRFillChart.evaluateChart(JRFillChart.java:843)
    at net.sf.jasperreports.engine.fill.JRFillChart.evaluateRenderer(JRFillChart.java:808)
    at net.sf.jasperreports.engine.fill.JRFillChart.evaluate(JRFillChart.java:797)
    at net.sf.jasperreports.engine.fill.JRFillElementContainer.evaluate(JRFillElementContainer.java:259)
    at net.sf.jasperreports.engine.fill.JRFillBand.evaluate(JRFillBand.java:455)
    at net.sf.jasperreports.engine.fill.JRHorizontalFiller.fillFixedBand(JRHorizontalFiller.java:2174)
    at net.sf.jasperreports.engine.fill.JRHorizontalFiller.fillFixedBand(JRHorizontalFiller.java:2168)
    at net.sf.jasperreports.engine.fill.JRHorizontalFiller.fillPageFooter(JRHorizontalFiller.java:1098)
    at net.sf.jasperreports.engine.fill.JRHorizontalFiller.fillSummaryNoLastFooterSamePage(JRHorizontalFiller.java:1228)
    at net.sf.jasperreports.engine.fill.JRHorizontalFiller.fillSummary(JRHorizontalFiller.java:1123)
    at net.sf.jasperreports.engine.fill.JRHorizontalFiller.fillReportEnd(JRHorizontalFiller.java:332)
    at net.sf.jasperreports.engine.fill.JRHorizontalFiller.fillReport(JRHorizontalFiller.java:164)
    at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:909)
    at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:822)
    at net.sf.jasperreports.engine.fill.JRFillSubreport.fillSubreport(JRFillSubreport.java:651)
    at net.sf.jasperreports.engine.fill.JRSubreportRunnable.run(JRSubreportRunnable.java:59)
    at net.sf.jasperreports.engine.fill.AbstractThreadSubreportRunner.run(AbstractThreadSubreportRunner.java:203)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)

    Você poderia me dar alguma dica sobre como resolver?

    Esse erro só acontece no relatório que tem gráfico, para outros relatórios “roda” perfeitamente.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *


Deprecated: Creation of dynamic property Daisy_Blog_Google_Local::$files is deprecated in /home2/clube692/public_html/wp-content/themes/daisy-blog/inc/blocks/font-family/inc/class-fonts-google-local.php on line 77

Deprecated: Creation of dynamic property Daisy_Blog_Google_Local::$files is deprecated in /home2/clube692/public_html/wp-content/themes/daisy-blog/inc/blocks/font-family/inc/class-fonts-google-local.php on line 77