[Resolvido] [jFreeChart] Tamanho da Label em gráficos de Barras

6 respostas
D

Pessoal, estou com um probleminha.

Estou usando o iReport 3.0 para gerar um relatório, porém o suporte pra graficos nele ainda é bem deficiente…
Não tem lá opção para configurar as propriedades da label das barras. Detalhe: da pra configurar os titulos, legendas, etc…, só não tem opção pra editar a label das barras…

Bom, uma imagem diz mais que palavras:

Tabela de Dados:

Se notarem, muitos valores não estão aparecendo nas barras, e é por conta do tamanho da fonte das labels. (gerei esse mesmo grafico com uma largura bem maior, daí os valores apareceram, mas foi apenas um teste, preciso mesmo é diminuir o tamanho da fonte dela).

Essa é a classe que configura o gráfico:

import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.plot.CategoryPlot;

import net.sf.jasperreports.engine.JRChart;
import net.sf.jasperreports.engine.JRChartCustomizer;

public class Barras3D implements JRChartCustomizer{
	
	public void customize(JFreeChart chart, JRChart jasperChart){
		
		CategoryPlot plot = (CategoryPlot)chart.getPlot();

		// Seta o range do eixo Y de 0 a 5 (e somente numeros inteiros)
		NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis();
		rangeAxis.setRange(0, 5);
		rangeAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
		
 
        // Seta a quantidade maxima de linhas para quebra da label da categoria (X) 
        plot.getDomainAxis().setMaximumCategoryLabelLines(5);  

	}

}

O que devo fazer nesse código para conseguir diminuir essa fonte?

6 Respostas

D

Problema resolvido… descrevo abaixo a solução para quem precisar…

Adicionei essas duas linhas no meu código:

CategoryItemRenderer renderer = plot.getRenderer();
renderer.setBaseItemLabelFont(new Font("SansSerif", Font.PLAIN, 5));

Ficando assim:

import java.awt.Font;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.renderer.category.CategoryItemRenderer;
import net.sf.jasperreports.engine.JRChart;
import net.sf.jasperreports.engine.JRChartCustomizer;

public class Barras3D implements JRChartCustomizer{
	
	public void customize(JFreeChart chart, JRChart jasperChart){
		
		CategoryPlot plot = (CategoryPlot)chart.getPlot();

		// Seta o range do eixo Y de 0 a 5 (e somente numeros inteiros)
		NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis();
		rangeAxis.setRange(0, 5);
		rangeAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
		
		// Seta a quantidade de linhas para quebra da label  
		plot.getDomainAxis().setMaximumCategoryLabelLines(5);

		//Seta a Fonte/tamanho das labels:  Tamanho 5, SansSerif
		CategoryItemRenderer renderer = plot.getRenderer();
		renderer.setBaseItemLabelFont(new Font("SansSerif", Font.PLAIN, 5));

	}

}

Resultado:

C

Criei a classe, mas acredito que haja algum problema com classpath.
Minha aplicação sempre dá erro “net.sf.jasperreports.engine.JRRuntimeException: Could not create chart customizer instance.”
e no final “Caused by: java.lang.ClassNotFoundException: TempoMedioCustomizer”
Já configurei o iReport e adicionei no classpath a pasta onde está o meu “TempoMedioCustomizer.class”, tentei adicionar também este arquivo ao caminho no servidor onde ficam os meus .jasper e nada parece adiantar.
Como você fez exatamente? :frowning:

S

Daniel,

fiz o que você disse, pore´m continua dando erro de classe não encontrada. Já alterei o classpath do ireport, coloquei o .class na pasta do relatório e mesmo assim não dá certo. Como você fez para não dá esse erro?

Valeu!!!

D

Para que o relatório encontre a classe, é necessário passar o caminho completo da classe no campo "Customizer Class" do grafico, ou seja, pacote + nome da classe: Ex.: br.com.projeto.MinhaClasse
No seu projeto, seja web ou não, isso basta.

Agora, se quiser gerar o relatorio no proprio iReport, é necessário configurar o classpath:

Options -> Classpath -> Add Folder

Coloque aí a pasta raiz das classes compiladas… num projeto Web, seria algo assim: c:/projeto/www/WEB-INF/classes

Salve e reinicie o iReport.

Pronto.

Importante: Ao q parece, o ireport carrega as classes do classpath informado assim q ele é aberto, logo, se vc alterar a classe e recompilar, o iReport não vai reconhecer. Sempre que recompilar uma claase, é necessário fechar e reabrir o iReport. infelizmente é um problema dessa versão 3.0…

S

Daniel,

valeu pela dica!!!

DEU CERTO.

J

Muito legal, porém as vezes tenho barras muito pequenas e o número não cabe dentro delas, sendo assim o número simplesmente some… Alguém sabe uma maneira de contornar esse problema, ou seja, fazer com que os labels apareçam mesmo se não caberem na barra?

Abraços!

Criado 30 de julho de 2009
Ultima resposta 1 de set. de 2010
Respostas 6
Participantes 4