JasperReport - seleção de cores no chart

6 respostas
J

E ai galera, tudo certo? estou pesquisando uma forma de gerar um gráfico pizza informando quais as cores a serem aplicadas no gráfico:
CENÁRIO:

  • Suponhamos que eu tenha uma tabela de cadastro de cidades, e para cada registro de cidade tenho armazenado uma cor (em RGB) e um determinado valor;
  • Através do iReport tenho gerado um relatório que apresenta os dados da tabela acima (cidade e valor) e gera um gráfico tipo pizza (com cores aleatórias);
    PROBLEMA:
  • Tenho que encontrar um forma de definir as cores do gráfico pizza de acordo com as cores informadas no cadastro da cidade; ou seja definir via ‘parameters’ ou via algum código no iReport uma forma de poder informar quais as cores a serem utilizadas no gráfico.

Estou pesquisando net.sf.jasperreports.charts.design.JRDesignPiePlot, JRChartPlot.JRSeriesColor e tudo que esta relacionado a ‘Jasper SeriesColor’ mas não estou avançando muito.

Se alguém puder me dar uma dica de como solucionar este problema ou por onde começar a estudar para chegar a uma solução, serei muito grato pois estou batendo cabeça com essa.

valeu galera, grande abraço

6 Respostas

J

Pelo que estive olhando no arquivo .jasper a solução deve estar no net.sf.jasperreports.engine.base.JRBaseChartPlot.JRBaseSeriesColor, sigo buscando, se alguém tiver alguma dica agradeço

falow

Metaleiro

[color=darkblue] Não sei se já dá uma luz :[/color]

iReport - construção de gráfico/query dinâmica

J
valeu a ajuda Metaleiro, mas acabei encontrando a solução da seguinte forma: - No iReport é possível implementar 'Customizer Class' que esta nas propriedades do chart na sessão 'Common chart properties'; neste campo informamos a classe que implementaremos, no caso 'PieChartCustomizer'; - Para que funcione é necessário informar em ferramentas, opções, guia ClassPath, o diretório onde salvaremos o arquivo 'PieChartCustomizer.class'; - Implementei o PieChartCustomizer.java com o código:
import java.awt.Color;
import net.sf.jasperreports.engine.JRChart;
import net.sf.jasperreports.engine.JRChartCustomizer;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.labels.StandardPieSectionLabelGenerator;
import org.jfree.chart.plot.PiePlot;
import org.jfree.data.general.PieDataset;
import javax.swing.JOptionPane;

public class PieChartCustomizer implements JRChartCustomizer {
	public void customize(JFreeChart jFreeChart, JRChart jRChart) {
		PiePlot piePlot = (PiePlot) jFreeChart.getPlot();
		final PieDataset dataset = piePlot.getDataset();
		for (int i = 0; i < dataset.getItemCount(); i++) {
			JOptionPane.showMessageDialog(null, (dataset.getKey(i) + " - " + dataset.getValue(i)) );
			piePlot.setSectionPaint(dataset.getKey(i), new Color(i * -10000));
		}
	}
}
- A partir dai basta implementar o código recuperando de algum lado a informação das cores que serão aplicadas.

falow galera

francis.claudio
JBenelli:
valeu a ajuda Metaleiro, mas acabei encontrando a solução da seguinte forma: - No iReport é possível implementar 'Customizer Class' que esta nas propriedades do chart na sessão 'Common chart properties'; neste campo informamos a classe que implementaremos, no caso 'PieChartCustomizer'; - Para que funcione é necessário informar em ferramentas, opções, guia ClassPath, o diretório onde salvaremos o arquivo 'PieChartCustomizer.class'; - Implementei o PieChartCustomizer.java com o código:
import java.awt.Color;
import net.sf.jasperreports.engine.JRChart;
import net.sf.jasperreports.engine.JRChartCustomizer;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.labels.StandardPieSectionLabelGenerator;
import org.jfree.chart.plot.PiePlot;
import org.jfree.data.general.PieDataset;
import javax.swing.JOptionPane;

public class PieChartCustomizer implements JRChartCustomizer {
	public void customize(JFreeChart jFreeChart, JRChart jRChart) {
		PiePlot piePlot = (PiePlot) jFreeChart.getPlot();
		final PieDataset dataset = piePlot.getDataset();
		for (int i = 0; i < dataset.getItemCount(); i++) {
			JOptionPane.showMessageDialog(null, (dataset.getKey(i) + " - " + dataset.getValue(i)) );
			piePlot.setSectionPaint(dataset.getKey(i), new Color(i * -10000));
		}
	}
}
- A partir dai basta implementar o código recuperando de algum lado a informação das cores que serão aplicadas.

falow galera

JBenelli!
Gostaria que você me passase mais detalhes sobre a inclusão da classe de customização no classpath.
Até o momento tentei de várias formas, e não consegui.
Se puder me ajudar, agradeço.

J

E ai Francis, tudo certo? cara o processo é esse descrito anteriormente, até que ponto você conseguiu avançar? ocorreu alguma mensagem de erro? … informe como você procedeu e ai podei lhe auxiliar melhor. Falow, abraço

francis.claudio

Buenas kara!
Depois de alguma insistência, consegui resolver o problema do classpath.
Agora eu preciso acessar no método da classe PieChartCustomizer a cor em RGB, que na verdade é um Field que não está sendo utilizado no dataSet do gráfico, porém está presente no escopo do relatório.
Como posso conseguir acessar esse Field ?
Agradeço!

Criado 9 de julho de 2009
Ultima resposta 20 de nov. de 2009
Respostas 6
Participantes 3