JFormattedField setar mascara para valor

4 respostas
D

Como voces fazem para setar uma mascara para um valor em um JFormattedField, exemplo:
se eu setar a mascara “###.###,##”
eu nao consigo digitar por exemplo 1.500,00…
como posso setar a mascara para ele nao obrigar as posicoes que eu coloquei na mascara…

4 Respostas

Ratao
//exemplo CPF
MaskFormatter cpf = new MaskFormatter("###.###.###-##");
cpf.install(JFormattedTextField);

Mas vc quer colocar a mascara e o campo nao respeitar essa mascara??? Tipo, setar e ele nao tornar obrigatorio a formatação?

D

eu sei como setar a mascara, o que eu disse foi que ao setar a mascara fico preso a ter que digitar todos os numeros, imagine que meu campo possa conter um valor de 10 centavos a 10 milhoes,
quero que a mascara nao me force a digitar todos os numeros no caso dos 10 centavos,
000.000.010,00
isso por que a mascara foi setada como
###.###.###,##

Ratao

Veja essa classe:

package varias;

import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
import javax.swing.text.PlainDocument;

public class FormDecimal extends PlainDocument{

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	public void insertString(int offs, String str, AttributeSet a) throws BadLocationException {
	String texto = getText(0,getLength());
		if(texto.length()&lt9){
			if (texto.length() &gt 0){
				if (texto.substring(0,1).equals("0")){
					texto = texto.substring(1,texto.length());
				}
			}
			
			remove(0,getLength());
			StringBuffer strBuf = new StringBuffer(texto.replaceAll(",","")+str);
				if(strBuf.length()&lt3){
					strBuf.insert(0,"0,");
				}else{
					strBuf.insert(strBuf.length()-2,",");
				}
				super.insertString(0, strBuf.toString(), a);
		}
		}
	
}

Depois de criar ela: JFormattedTextField.setDocument(objeto_da_classe_FormDecimal);

Desculpe ae, mas nao coube direito na tela rsrsrs…

Veja se ajuda. :wink:

D

É isso que precisa para formatar o campo:

public void aplicaMascaraDecimal(String mascaraCampo) {
        java.text.DecimalFormat decimal = new java.text.DecimalFormat(mascaraCampo);
        javax.swing.text.NumberFormatter numFormatter = new javax.swing.text.NumberFormatter(decimal);
        numFormatter.setFormat(decimal);
        numFormatter.setAllowsInvalid(false);
        this.setFormatterFactory(new javax.swing.text.DefaultFormatterFactory(numFormatter));
        this.setHorizontalAlignment(javax.swing.JTextField.TRAILING);
    }
Criado 26 de abril de 2007
Ultima resposta 26 de abr. de 2007
Respostas 4
Participantes 2