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…
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?
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));
}
}
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?
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?
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…
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?