JTextField - Como atribuir uma Mascara?

Tenho o seguinte metodo
private JTextField getJtPrazo01() {
if (jtPrazo01 == null) {
jtPrazo01 = new JTextField();
jtPrazo01.setBounds(new java.awt.Rectangle(30,30,35,19));
}
return jtPrazo01;
}

Gostaria de formatar com uma mascara numérica 999
Já tentei MaskFormatter e JFormattedTextField, mas confesso que não consegui usar e preciso de ajuda

Obrigado

O que quer formatar?

Comigo funcionou…

JFormattedTextField field = new JFormattedTextField(new MaskFormatter(mask));

Desculpe devo ter me expressado errado, Tenho uma tela feita em Eclipse 3.2 que possui a variável JTextField de nome jtPrazo01,
Gostaria de formatar com uma mascara numérica 999, assim o usuário ficara limitado a informar um dado numérico de no Maximo 3 dígitos

Obrigado por qualquer ajuda


Assim ajuda???

Assim ajuda???

Desculpe minha falta de conhecimento, mas confesso que não sei onde colocar em meu método a sintaxe JFormattedTextField field = new JFormattedTextField(new MaskFormatter(“999”)); que vc me passou
vc poderia me ajudar ?

vc subistitui o JTextField pelo JFormattedTextField , dai funciona!

Olhe no código que está sendo gerado, onde ele cria o componente que você deseja e substitua:

por

Gerr@
Obrigado, funcionou
Mas o campo aparece 999, quando utilizo a mascara ### ,ele so permite alterar o campo com 3 digitos e quando digito 1 ou 2 valores ela apaga quando saio do campo

O metodo ficou assim :
private JTextField getJtPrazo01() {
if (jtPrazo01 == null) {
try{
jtPrazo01 = new JFormattedTextField(new MaskFormatter("###"));
}catch (Exception e){};

		jtPrazo01.setBounds(new java.awt.Rectangle(30,30,35,19));
	}
	return jtPrazo01;
}

Caro Geraldo,

Tente fazer o seguinte:

private MaskFormatter formatter;

//Crie o formatter no construtor da classe
//No seu método faça

 if (jtPrazo01 == null) {
try{
      formatter.install(jtPrazo01);
}catch (Exception e){}; 

Veja se funciona da maneira que você gostaria
[]'s :wink:

Acho que talvez então a máscara não seja a abordagem mais adequada… Talvez seja o caso de você criar um document filter personalizado para o seu campo.

Geraldo,

O JFormattedTextField possui uma política de validação para usar a máscara.

Caso o valor entrado não corresponda totalmente à mascara, o campo voltará ao valor anterior quando perder o foco.

Mas isso pode ser alterado, usando o método setFocusLostBehavior(int)

Existem 4 comportamentos, segundo a documentação:

[quote]JFormattedTextField.REVERT
Revert the display to match that of getValue, possibly losing the current edit.

JFormattedTextField.COMMIT
Commits the current value. If the value being edited isn’t considered a legal value by the AbstractFormatter that is, a ParseException is thrown, then the value will not change, and then edited value will persist.

JFormattedTextField.COMMIT_OR_REVERT
Similar to COMMIT, but if the value isn’t legal, behave like REVERT.

JFormattedTextField.PERSIST
Do nothing, don’t obtain a new AbstractFormatter, and don’t update the value.

The default is JFormattedTextField.COMMIT_OR_REVERT, refer to setFocusLostBehavior(int) for more information on this.[/quote]

Sendo assim, testa cada um deles, por exemplo.

seuField.setFocusLostBehavior( JFormattedTextField.PERSIST );

Falow!

Obrigado a Todos pela Ajuda, o Metodo Ficou Assim

private JFormattedTextField jCEP = null;

private JFormattedTextField getFormattedTextField() throws java.text.ParseException{
	MaskFormatter m_cep;   
	try {   
		m_cep = new MaskFormatter("#####-###");   
		m_cep.setValidCharacters("0123456789");   
		jCEP = new javax.swing.JFormattedTextField(m_cep);   
		jCEP.setSize(new java.awt.Dimension(118,20));
		jCEP.setLocation(new java.awt.Point(69,23));
		jCEP.setFocusLostBehavior(JFormattedTextField.COMMIT); 
	
	} catch (ParseException e) {   
		e.printStackTrace();   
	}
	return jCEP;   
	}

Oi gente, meus amigos eu tb estava com o mesmo problema. Toda vez q eu apertava a tecla enter o meu o meu campo que tem uma mascara(#######) pra sete digitos ficava em branco se eu digita-se apenas 4 digitos, este era o problema que eu resolvi da seguinte forma, que esta funcionando perfeitamente, espero ter ajudado vcs… um abraço!

	campo1.addKeyListener(new KeyAdapter(){
		public void keyPressed(KeyEvent evt2) {
			int keyCode = evt2.getKeyCode(); 
			if(keyCode == KeyEvent.VK_ENTER || keyCode == KeyEvent.VK_TAB){
				if(campo1.getText().trim().equals("")){
					JOptionPane.showMessageDialog(null,"Este campo não pode estar em branco","Mensagem", 0);
					campo1.requestFocus();
				}else{
					System.out.println("campo 1 == "+campo1.getText());
					maskNumero.setPlaceholder(campo1.getText());
					consultaVolume(evt2);
				}
			}
		}});

Oi gente eu fiz o teste com esse codigo e tb funcionouuu!!! blza…
campo1.setFocusLostBehavior(JFormattedTextField.COMMIT);

	campo1.addKeyListener(new KeyAdapter(){
		public void keyPressed(KeyEvent evt2) {
			int keyCode = evt2.getKeyCode(); 
			if(keyCode == KeyEvent.VK_ENTER || keyCode == KeyEvent.VK_TAB){
				if(campo1.getText().trim().equals("")){
					JOptionPane.showMessageDialog(null,"Este campo não pode estar em branco","Mensagem", 0);
					campo1.requestFocus();
				}else{

// maskNumero.setPlaceholder(campo1.getText());
campo1.setFocusLostBehavior(JFormattedTextField.COMMIT);
consultaVolume(evt2);
}
}
}});

Pessoal, tudo bem ?

E como fazer para atribuir máscara de numeros decimais, seguindo as definições locais

(No Brasil, ponto separando milhar e vírgula separando decimais), com números de tamanho váriável ?

Tentei o setFormatterFactory, mas ele não apresenta o número inteiro, fica só na casa do milhar.

Grato.

abçs

Pessoal,

Tentando o mesmo método, não consegui formatar números decimais.

Ele formata ,mas trunca o número na casa dos milhares.

Alguém tem alguma idéia ?

abçs

[quote=Leandro® Combinato]Oi gente, meus amigos eu tb estava com o mesmo problema. Toda vez q eu apertava a tecla enter o meu o meu campo que tem uma mascara(#######) pra sete digitos ficava em branco se eu digita-se apenas 4 digitos, este era o problema que eu resolvi da seguinte forma, que esta funcionando perfeitamente, espero ter ajudado vcs… um abraço!

So pra ver como está esse código Obrigado.

		campo1.addKeyListener(new KeyAdapter(){
			public void keyPressed(KeyEvent evt2) {
				int keyCode = evt2.getKeyCode(); 
				if(keyCode == KeyEvent.VK_ENTER || keyCode == KeyEvent.VK_TAB){
					if(campo1.getText().trim().equals("")){
						JOptionPane.showMessageDialog(null,"Este campo não pode estar em branco","Mensagem", 0);
						campo1.requestFocus();
					}else{
						System.out.println("campo 1 == "+campo1.getText());
						maskNumero.setPlaceholder(campo1.getText());
						consultaVolume(evt2);
					}
				}
			}});

[/quote]

[quote=Leandro® Combinato]Oi gente eu fiz o teste com esse codigo e tb funcionouuu!!! blza…
campo1.setFocusLostBehavior(JFormattedTextField.COMMIT);


		campo1.addKeyListener(new KeyAdapter(){
			public void keyPressed(KeyEvent evt2) {
				int keyCode = evt2.getKeyCode(); 
				if(keyCode == KeyEvent.VK_ENTER || keyCode == KeyEvent.VK_TAB){
					if(campo1.getText().trim().equals("")){
						JOptionPane.showMessageDialog(null,"Este campo não pode estar em branco","Mensagem", 0);
						campo1.requestFocus();
					}else{
//						maskNumero.setPlaceholder(campo1.getText());
						campo1.setFocusLostBehavior(JFormattedTextField.COMMIT); 
						consultaVolume(evt2);
					}
				}
			}});

[/quote]