JFormattedTextField + setText()

11 respostas
Vingdel

Boa Noite!

Pessoal, me deparei com o seguinte problema:

Eu tenho alguns campos em um formulário que quero formatar, tanto na entrada de dados do usuário, quanto na consulta ao banco.

A formatação funciona para a entrada de dados do funcionário (se eu não usar o setText()), porém quando é para formatar os dados vindos do banco de dados (usando o setText()) a formatação acontece somente para o último JFormattedTextField a receber a MaskFormatter que criei para data.

Outra coisa que observei nos campos que deveriam ficar com os dados formatados, é que somente quando o campo perde o foco que a formatação aparece, mas sem os dados do o setText().

Alguém sabe me dizer porque isso acontece e como eu poderia resolver isso?

Abaixo segue um código para exemplificar meu projeto, se puder faça o teste e veja o comportamento:
import java.awt.FlowLayout;   
import javax.swing.JFormattedTextField;   
import javax.swing.JFrame;
import javax.swing.text.MaskFormatter;   
import java.text.ParseException;   

public class TextFieldComMascara extends JFrame {
	private JFormattedTextField data, data2;   

	private MaskFormatter ftmData;

	public TextFieldComMascara()throws ParseException{
		ftmData = new MaskFormatter("##/##/####");

		data = new JFormattedTextField(ftmData);
		data2 = new JFormattedTextField(ftmData);

		data.setText("22052011");
		data2.setText("22052011");
		
		ftmData.setValidCharacters("[telefone removido]");

		data.setColumns(6);
		data2.setColumns(6);
		
		add(data);
		add(data2);
         
      setLayout(new FlowLayout());   
      setDefaultCloseOperation(DISPOSE_ON_CLOSE);   
      setSize(200, 200);   
      setVisible(true);   
   }
	public static void main(String[] args) {
		try {
			new TextFieldComMascara();
		}catch (ParseException e) {
			e.printStackTrace();
		}
	}
}

Desde já agradeço!

Abraço!

11 Respostas

Ivan_Alves

Tenta jogar os dados com os campos já formatados por exemplo 22052011 para 22/05/2011 ou crie uma mascara para cada campo pode resolver qualquer coisa retorna ai!

flw

Andre_Rosa

Eu iria sugerir a mesma coisa que o camarada Ivan Alves sugeriu. Outra alternativa, que é o que costumo fazer em meus programas, é trabalhar com vários jTextFields. No caso de uma data, por exemplo, eu trabalho com 3. Depois junto tudo em uma string:

MyDate = jTextFieldDay.getText() +"/"+ jTextFieldMonth.getText() +"/"+ jTextFieldYear.getText();

Vingdel

Opa, beleza pessoal!

Ivan Alves:
Tenta jogar os dados com os campos já formatados por exemplo 22052011 para 22/05/2011 ou crie uma mascara para cada campo pode resolver qualquer coisa retorna ai!

flw

Sim Ivan, eu poderia formatar sim a string que vem do banco, inclusive fiz um método que trata da string, pois a string vem assim do banco: 2011-05-22 public String data_format(String data) { String datacerta; if (data.substring(2, 3).equals("/")) { datacerta = data.substring(6, 10) + "-" + data.substring(3, 5) + "-" + data.substring(0, 2); } else { datacerta = data.substring(8, 10) + "" + data.substring(5, 7) + "" + data.substring(0, 4); } return datacerta; }Este método tem duas funções, uma é tratar a string que vem do usuário (22/05/2011) e retornar no padrão do banco (2011-05-02) e a outra receber a consulta ao banco (2011-05-02) e retornar (22052011) para o MaskFormatter colocar as barras.

Quanto a criar uma MaskFormatter para cada JFormattedTextField, isso resolve sim, essa solução eu já tinha em mente, por ter analisado que o último recebia a formatação.

Eu poderia fazer assim:data = new JFormattedTextField(new MarkFormatter("##/##/####")); data2 = new JFormattedTextField(new MarkFormatter("##/##/####"));Mas quando fiz esse tópico a intenção era entender porque a formatação não funciona com o setText() e saber se eu estava fazendo alguma coisa errada, além de descobrir uma alternativa usando uma única MaskFormatter, afinal esse é o correto já que a formatação é a mesma.

Agradeço pela sua sugestão, irmão…

Andre Rosa:
Eu iria sugerir a mesma coisa que o camarada Ivan Alves sugeriu. Outra alternativa, que é o que costumo fazer em meus programas, é trabalhar com vários jTextFields. No caso de uma data, por exemplo, eu trabalho com 3. Depois junto tudo em uma string:MyDate = jTextFieldDay.getText() +"/"+ jTextFieldMonth.getText() +"/"+ jTextFieldYear.getText();

Andre, entendo sua sugestão, mas meu problema não está em formatar campo na hora de receber do usuário, isso ta sendo feito. O problema está em formatar o que recebo do banco, no caso o problema está sendo em formatar um texto atribuido ao JFormattedTextField usando o método setText().

Obrigado pela atenção, meu brother!

Se tiverem mais alguma ideia, será bem-vinda!

Abraço!

ViniGodoy

Movido para o fórum de interface gráfica. Por favor, leia atentamente a descrição dos fóruns antes de postar.

RenanRosa

Espera ai, vamos parar um pouco, não aguento mais ver posts que o ViniGodoy falando que moveu o tópico, pow meu, vamos organizar isso, coloquem uma mensagem quando for criar um tópico falando pra colocar no lugar certo, o pessoal parece que nem leem as regras, saem postando em qualquer lugar, isso pode ficar ruim até pra quem posta, por que os avançados em determinado tópico não veem a pergunta para responder.

Vamos pensar em algo para diminuir isso.

ViniGodoy

Espera ai, vamos parar um pouco, não aguento mais ver posts que o ViniGodoy falando que moveu o tópico, pow meu, vamos organizar isso, coloquem uma mensagem quando for criar um tópico falando pra colocar no lugar certo, o pessoal parece que nem leem as regras, saem postando em qualquer lugar, isso pode ficar ruim até pra quem posta, por que os avançados em determinado tópico não veem a pergunta para responder.

Vamos pensar em algo para diminuir isso.

E olha que só estou movimentando o que vem sendo postado em “Java básico”.
Na verdade, comecei a mover com mais atenção depois desse post aqui:
http://www.guj.com.br/java/242250-onde-se-postar

Vingdel

Boa Noite, ViniGodoy!

Desculpa o transtorno! Realmente vacilei em não postar no local correto.

Por acaso você sabe me esclarecer quanto ao problema que esbocei neste tópico?

Abraço e obrigado pela correção!

ViniGodoy

Não, há muito tempo desisti de usar o JFormattedTextField.

Vingdel

Hum… Como você faz para formatar campos de texto?

ViniGodoy

Para campos simples, como os de números, uso meu próprio formatter.
E os mais complexos eu não formato. Felizmente meu sistema não exige.

Vingdel

Ok. Obrigado pela atenção!

Criado 22 de maio de 2011
Ultima resposta 24 de mai. de 2011
Respostas 11
Participantes 5