Esse artigo faz parte da revista Java Magazine edição 24. Clique aqui para ler todos os artigos desta edição

 

Imagem

 

Atenção: por essa edição ser muito antiga não há arquivo PDF para download.Os artigos dessa edição estão disponíveis somente através do formato HTML. 

 

Gráficos com JFreeChart

Aplicações mais Visuais para Desktop e Web

Conheça os fundamentos da API JFreechart, os principais tipos de gráficos suportados e uma taglib que permite gerar gráficos sob demanda em JSPs

Somos constantemente solicitados a criar aplicações com demonstrações financeiras e grandes conjuntos de dados numéricos, que muitas vezes são apresentados em tabelas. Mas o formato tabular nem sempre é o ideal, especialmente quando é preciso extrair tendências ou obter uma visão geral para a tomada de decisões. Por que então não facilitar a vida dos usuários, mostrando os números visualmente – em gráficos?

Uma solução excelente é o JFreeChart, uma biblioteca open source completa e 100% Java para a geração de dezenas de tipos de gráficos, entre eles gráficos de pizza, barras, linhas, área, Gantt e combinação. O JFreeChart suporta formatos tridimensionais e permite imprimir os gráficos, gravá-los como imagens JPEG e PNG, mudar o nível de zoom, entre outras operações. Há ainda facilidades para integração com aplicações desktop e o suporte à exportação para PDF (via a API iText) e SVG (com o Apache Batik). E, através da taglib Cewolf, é possível gerar gráficos do JFreeChart dinamicamente em aplicações web.

Neste artigo é mostrado, passo a passo, como implementar os tipos principais de gráficos com o JFreeChart e como incorporá-los a aplicações desktop e web. O objetivo é deixar o leitor com um entendimento geral do JFreeChart e capaz de usar gráficos com razoável complexidade em suas aplicações.

Instalação e geração básica

O JFreeChart é software livre, disponibilizado sob licença LGPL. O site do produto, jfree.org/jfreechart, disponibiliza arquivos de distribuição para Windows (zip) e Linux (tar.gz). O download contém os fontes completos e jars, além dos binários e um aplicação de demonstração; é incluída também uma pasta com as bibliotecas usadas pela API.

Nos exemplos deste artigo usaremos apenas o jar dos binários (jfreechart-xxx.jar) e o das dependências (lib/jcommon-xxx.jar). Estes dois arquivos devem ser inseridos no classpath do seu sistema.

Quando esta edição chegar a você, deverá ter sido lançada a versão 1.0 do JFreeChart, com sua esperada API estável (um problema das versões iniciais do JFreeChart eram as mudanças freqüentes na API). Para os exemplos desse artigo foi usada a versão 1.0.0-pre2, que deve preservar compatibilidade total com os exemplos, pois foram utilizados apenas recursos fundamentais da API.

A geração de gráficos com o JFreeChart começa com a criação de um objeto do tipo org.jfree.data.general.Dataset. Objetos do tipo Dataset (que chamaremos genericamente de "datasets"), definem os dados a serem plotados. Para cada tipo de gráfico há um tipo específico de dataset. Há mais de trinta tipos já implementados, e não é difícil desenvolver novos tipos com objetivos específicos.

Depois de definir o dataset apropriado, podemos criar o "modelo" do gráfico, que é representado por um objeto org.jfree.chart.JFreeChart. A geração desse objeto é feita por meio da classe org.jfree.chart.ChartFactory, que tem diversos métodos createXxx() para tipos de gráficos comuns.

Resumidamente, a construção de gráficos com o JFreeChart é feita em quatro etapas:

1.     Definição do conjunto de dados a serem plotados (o dataset)

2.     Criação do modelo do gráfico (representado por um objeto da classe JFreeChart)

3.     (Opcional) Alteração de propriedades de plotagem (fazendo modificações no objeto Plot obtido a partir do objeto JFreeChart)

4.     Geração da imagem do gráfico a partir do seu modelo (ou de um componente visual, como um painel Swing)

 

Este fluxo de construção pode ser observado na Figura 1.

Existem duas famílias principais de gráficos no JFreeChart: de categorias e XY. Neste artigo demonstramos os gráficos de categorias, que são usados para apresentar dados agrupados em um número restrito de itens, como um gráfico de barras comparando a evolução de vendas por região, ou um gráfico de pizza com percentagens em uma pesquisa eleitoral. Gráficos de categorias são os mais comuns em aplicações de negócios; gráficos XY são mais usados em aplicações científicas e de engenharia.

Gráficos de pizza

Para criar um gráfico de pizza, o mais prático é usar a classe org.jfree.data.general.DefaultPieDataset, que implementa a interface PieDataset do mesmo pacote. Em um objeto da classe DefaultPieDataset, armazenamos os valores e suas descrições, a serem exibidos no gráfico. Tendo definido essas informações, criamos o gráfico usando a classe org.jfree.chart.ChartFactory.

A Listagem 1 mostra um programa que monta um gráfico de pizza e ao final gera uma imagem PNG do gráfico. Usando o método setValue() de DefaultPieDataset, adicionamos os itens a ser exibidos e informamos uma legenda para cada item, além de um valor numérico, que pode ser um double ou um java.lang.Number.

 

Nos exemplos deste artigo, os datasets são preenchidos com valores definidos diretamente no código, mas poderíamos, claro, obter os valores de um banco de dados ou framework de persistência.

 

Tendo preenchido o dataset, podemos gerar o gráfico usando o método createPieChart() da classe ChartFactory. São passados como parâmetros o título do gráfico, o dataset e flags (valores booleanos) que indicam se devem ser mostradas legendas, exibidos tooltips ("dicas") e geradas URLs. Veja um exemplo:

 

 ChartFactory.createPieChart("População Nacional", dataset, true, false, false); ...

Quer ler esse conteúdo completo? Tenha acesso completo