JTable + campo BigDecimal

1 resposta
fabioebner

Pessoal tenho um problema… fiz um binding de uma JTable com o resultado do meu Banco… porem no banco eu tenho um campo NUMERIC(12.2) que no JAva se transforma em BigDecimal, ate ae bele… omeu problema e: como eu fiz esse binding da JTable com o banco ele faz o codigo automaticamente e qdo eu insiro alguma coisa no banco ele mostra na minha JTable um numero gigante tipo 15.220000000000000000000021 sendo q eu so mandei ele incluir 15.22, e nao consigo fazer ele mostrar somente o 15.22 ao inves de tudo… alguem ae sabe como eu posso resolver isso??

ja tentei alterar o getVlOperacao, mas ele parece q nao deixa… ve alguma coisa a mais ali e da erro… nao consigo mudar o tipo da coluna da JTable pois o netbeans criou sozinho… :open_mouth:

valeu

1 Resposta

cbridi

Usando JXTable, resolvi com um renderer para a classe BigDecimal.

....
		table.setDefaultRenderer(BigDecimal.class, new BigDecimalCellRenderer());
.....

	class BigDecimalCellRenderer extends DefaultTableCellRenderer {

		public BigDecimalCellRenderer() {
			super();
			//para alinhar a direita
			setHorizontalAlignment(SwingConstants.RIGHT);
		}

		@Override
		public void setValue(Object aValue) {
			Object result = aValue;
			if (( aValue != null) && (aValue instanceof Number)) {
				Number numberValue = (Number)aValue;
				
				NumberFormatter numberFormatter = new EmptyNumberFormatter(NumberFormat.getInstance(), new BigDecimal(0)){
					/**
					 * sobrescrito para exibir numero de casas decimais correspondentes ao scale do BigDecimal
					 */
					@Override
					public String valueToString(Object value)
							throws ParseException {
						BigDecimal valor = (BigDecimal) value;
						
						String s = super.valueToString(valor);
						
						if ( ! StringUtils.contains(s, ",")) {
							s = s + ",";
						}
						
						return StringUtils.rightPad(s, s.length() - (s.length() - StringUtils.indexOf(s, ",")) + valor.scale() + 1, "0");
					}
					
				};
				numberFormatter.setValueClass(BigDecimal.class); 

				StringConverter converter = new StringConverter(); 
				converter.convert(BigDecimal.class, numberValue);
				
				try {
					result = numberFormatter.valueToString(numberValue);
				} catch (Exception e) {
					AppLogger.getLogger(BaseApplication.class).error("erro na formatação do BigDecimal", e);
				}
			} 
			super.setValue(result);
		}   		
	}

Não sei se é melhor forma, mas tem funcionado.

Criado 30 de julho de 2008
Ultima resposta 7 de ago. de 2008
Respostas 1
Participantes 2