Swing + TextField + Valor Monetario

9 respostas
feltraco

Estou precisando de um TextField com os seguintes requisitos:

  • tamanho definido
  • escreve da direita para esquerda
  • soh aceita numeros

alguem se habilita ?

9 Respostas

Zakim

eu utilizei um tutorial que tem aqui no guj para limitar o tamanho dos fields.

te aconselho a utlizar formatedField. no netbeans, vem incluso algumas mascaras pré-definidas, sem falar que vc pode criar sua propria mascara.

vale a pena conferir.

artigo sobre textfield que tbm serve para formatedfield : http://www.guj.com.br/java.tutorial.artigo.29.1.guj

:stuck_out_tongue:

feltraco

Valeu Zakim
tinha encontrado um bem parecido que resolveu 2 dos mes 3 problemas
escreve da direita para a esquerda e limita, porem continua a aceitar letras

segue o código

public class Monetario extends PlainDocument{   

	public void insertString(int offs, String str, AttributeSet a) throws BadLocationException {   
		String texto = getText(0,getLength());   
		if(texto.length()<7){   
			remove(0,getLength());   
			StringBuffer strBuf = new StringBuffer(texto.replaceAll(",","")+str);   
			if(strBuf.length()<3)   
				strBuf. insert(0,",");   
			else   
				strBuf.insert(strBuf.length()-2,",");   
			super.insertString(0, strBuf.toString(), a);   
		}   
	}   
}

Valeus

Zakim

então adote o JFormatedFIeld. As mascaras nao permitem que letras sejam inseridas! :stuck_out_tongue:

rdantas

Use o MaskFormatter. Ele vai impedir que o usuario insira letras. Alias, com ele vc define o que aceitar como entrada. Dá uma procurada que vc acha como usar.

Espero ter ajudado,

Rodrigo.

keller

Aqui tem um pronto:
JMoneyField

Funciona perfeitamente.
Boa sorte! Até mais. :thumbup:

correainfo

Fiz esse que vc limita e so aceita numeros…

Nesse metodo que limita so numeros…

A classe completa…

/** 
 * @author lcorrea 
 **/
public class NumberCaseField extends JTextField {

	private static final long serialVersionUID = 3544668503492998195L;
	private int tamanho;

	public NumberCaseField(int cols) {
		super(cols);

		tamanho = cols;
	}

	protected Document createDefaultModel() {
		return new NumberCaseDocument();
	}

	public class NumberCaseDocument extends PlainDocument {

		private static final long serialVersionUID = 3760566386191052855L;
		private char[] upper;

		public void insertString(int offs, String str, AttributeSet a) throws BadLocationException {
			if (str == null | tamanho == offs) {
				Toolkit.getDefaultToolkit().beep();
				return;
			}

			if(Character.isDigit(str.charAt(0))){
				upper = str.toCharArray();
			}else{
				upper = new char[0];
			}
			
			super.insertString(offs, new String(upper), a);
		}
	}
}

Espero ter ajudado…

feltraco

keller:
Aqui tem um pronto:
JMoneyField

Funciona perfeitamente.
Boa sorte! Até mais. :thumbup:

Verdade funciona perfeitamente :thumbup:

Valeu…

feltraco

Antes de encerrar o tópico…

Formatei como Valor o campo… ele fica assim…
1.000,50 por exemplo

porem isso é uma string
gostaria de saber se para eu passar isso para Floar ou Double
vou ter que implementar um metodo para remover o “.” e as ","
ou tem outro jeito de fazer isso ?

FLwS

root_

cara. eh soh sobrescrever o metodo getText(), e ja mandar a string no formato de double ou BigDecimal…

tipo:

@Override
    public String getText()
    {
        return super.getText().replace(".", "").replace(",", ".");
    }
Criado 27 de fevereiro de 2008
Ultima resposta 3 de jun. de 2008
Respostas 9
Participantes 6