Mascara no ireport, campo com estilo

13 respostas
M
ola pessoal

tenho um campo bigdecimal no ireport onde coloco a mascara de valor monetarionele para impressão ( 1.500,000 por exemplo )

agora coloquei um estilo no campo, para formatar ele, se for > 0 imprime azul, senao vermelho

dae tive que mudar o tipo do campo de bigdecimal para string

ai surge o problema, eu perco a mascara do valor monetario ( imprime 1500.000 )

como resolver

obrigado

13 Respostas

L

Usa DecimalFormat… formata ele antes de incluir no dataSource.
Ou implementa um decorator pra moeda (o que eu acho mais saudável pra sua sanidade mental no futuro).
Abraço!

M

como eu formato ele antes de incluir no datasource ?

L
Google é vida:
/*
 Este exemplo mostra como formatar moeda
 usando a classe NumberFormat
*/

import java.text.*;

public class Estudos{
  public static void main(String[] args){

    double valor = 1234567.89;
    NumberFormat nf = NumberFormat.getCurrencyInstance();
    String valorFormatado = nf.format(valor);
    System.out.println(valorFormatado);   

  }
}

Fonte: [url]http://www.arquivodecodigos.net/dicas/java-formatando-moeda-usando-a-classe-numberformat-1831.html[/url]

Abraço!

L

O double ali pode virar um BigDecimal… te baseia nisso e GO AHEAD

M

mas to no ireport

L

Tá… tu tá passando isso como? O SQL tá dentro do iReport ou fora? Se tá fora, muda o tipo do retorno e enjoy!

M

dentro do ireport

M

tentei usar replace do ponto pela virgula
mas nao deu certo, deu erro na compilação
e mesmo assim nao formataria o campo corretamente
valores grandes 1.000 ou 10.000 vai sair 1000 ou 10000
confude com a quantidade de zeros

L

Então aborda de um jeito diferente… ao invés de pintar a string na mão, cria um style e aplica…

M

eu uso style, alias, que ja foi um sacrificio pra funcionar

( $V{total_entrada}.intValue() < 0 ) ? "<style forecolor='#FF0000'>" + $V{total_entrada} + "</style>" : "<style forecolor='#0033FF'>" + V{total_entrada} + "</style>"
L

Não, mestre… Style do iReport, não usando markup html do campo… vou ver se acho um exemplo aqui.

L

Cara, me veio uma solução pra ti.
Deixa o campo como BigDecimal, mesmo, mas cria dois, um sobre o outro, e põe uma expressão no “Print When Expression” pra ocultar / exibir um ou outro quando for negativo/positivo, e daí tu pinta com o forecolor, backcolor.
Me fiz entender?
Abraço!

M

assim funcionou
nao tinha pensando nisso
obrigado

Criado 18 de março de 2011
Ultima resposta 18 de mar. de 2011
Respostas 13
Participantes 2