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

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?

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:

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:

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!!!

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…

Daniel,

valeu pela dica!!!

DEU CERTO.

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!