JFormattedTextField + setText()

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:[code]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("0123456789");

	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();
}
}
}[/code]

Desde já agradeço!

Abraço!

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

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();

Opa, beleza pessoal!

[quote=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[/quote]

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…

[quote=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();
[/quote]

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!

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

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.

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.[/quote]

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

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!

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

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

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.

Ok. Obrigado pela atenção!