Problemas serios com JFormatedTextField, um dilema!

2 respostas
anjomal

Ae galera to desenvolvendo alguns componentes e me deparei com um dilema, quando estava criando TextFields especializados ex(JDateTetField,Numeric e etc etc …) estava tentando subclassificar JFormatedTextField pensando em fazer as coisas mais rapido mas so tive dores de cabeça realmente o JFormatedTextField não funciona como deveria, em alguns casos não funciona, precisa de ficar fazendo gambiarras e uma coisa de ficar de cabelo em pé :shock: para citar um exemplo, se voce registra um focusListner e por um acaso vc possuir uma mascara no campo ele simplismente ignora o evento :shock: se vc tenta criar um document e instalar no JFormatedTextField de uma hora p/ outra ele da um pau de NullPointerException do nada ! :? eu acho que vou desistir dele e começar do zero um componente, pq desse jeito não dá. alguem tem alguma coisa pronta nesse sentido e poderia contribuir ?

Obrigado a todos!
Estou voltando a comunidade !!!

2 Respostas

Ironlynx

Qdo preciso de JDateTextField eu uso como exemplo uma formatação de data como essa:
http://www.guj.com.br/forum/viewtopic.php?t=2143

Mas isso soh dah dor de cabeça..espero q dêem uma melhorada na JSE 5.0...

Pow soh tenho um exemplo tosco q peguei nem sei onde:
import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 
import javax.swing.text.MaskFormatter; 
import java.text.ParseException; 
/*mostra formatação para data e CPF*/
public class UITestMasc extends JFrame implements ActionListener { 
    
   JFormattedTextField fieldFormatado; 
    
   MaskFormatter mascDataNasc; 
   MaskFormatter mascCpf; 
    
   JButton btnData = new JButton("Data"); 
   JButton btnCpf = new JButton("CPF"); 
    
   public UITestMasc() { 
      super("Teste de JFormattedTextField"); 
      this.getContentPane().setLayout(null); 
      setBounds(100,100,250,150); 
      setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      setLocationRelativeTo(null);//centraliza o JFrame na Tela
      try { 
         mascDataNasc = new MaskFormatter("##/##/####"); 
         mascDataNasc.setPlaceholderCharacter('_'); 
         fieldFormatado = new JFormattedTextField(mascDataNasc); 
         fieldFormatado.setBounds(30,30,100,20); 
         this.getContentPane().add(fieldFormatado, null); 
      } 
      catch (ParseException e) { 
         e.printStackTrace(); 
      } 
       
      btnData.setBounds(10,60,60,20); 
      btnData.addActionListener(this); 
      this.getContentPane().add(btnData, null); 
       
      btnCpf.setBounds(100,60,60,20); 
      btnCpf.addActionListener(this); 
      this.getContentPane().add(btnCpf, null); 
       
      show(); 
       
   } 
    
   public void actionPerformed(ActionEvent e) { 
      if(e.getSource() == btnData) { 
         try { 
            this.getContentPane().remove(fieldFormatado); 
            mascDataNasc = new MaskFormatter("##/##/####"); 
            mascDataNasc.setPlaceholderCharacter('_'); 
            fieldFormatado = new JFormattedTextField(mascDataNasc); 
            fieldFormatado.setBounds(30,30,100,20); 
            this.getContentPane().add(fieldFormatado, null); 
            show(); 
         } 
         catch (ParseException pe) { 
            pe.printStackTrace(); 
         } 
      } 
       
      if(e.getSource() == btnCpf) { 
         try { 
            this.getContentPane().remove(fieldFormatado); 
            mascCpf = new MaskFormatter("###.###.###.-##"); 
            mascCpf.setPlaceholderCharacter('_'); 
            fieldFormatado = new JFormattedTextField(mascCpf); 
            fieldFormatado.setBounds(30,30,100,20); 
            this.getContentPane().add(fieldFormatado, null); 
            show(); 
         } 
         catch (ParseException pe) { 
            pe.printStackTrace(); 
         } 
      } 
   } 
    
   public static void main(String[] args) { 
      new UITestMasc();    
   } 
    
}
Mas eu tenho um supercompleto em algum lugar...(o foda eh achar...isso aqui tah uma zona! :roll: ) Se eu achar algo interessante eu posto aqui... mas jah ouvi muita gente reclamar de Document,principalmente problemas com foco...
T

Eu tambem ja descobri um erro no JFormattedTextField, o erro e o seguinte:

Quando e criado um JFormattedTextField e um MaskFormatter utilizando como base o DecimalFormat para fazer a formatacao de numeros, com casa decimal e etc, e e estabelecido um limite de digitos, ou seja, 5 inteiros e 2 decimais, no momento da entrada de dados, quando e atingido o limite, por exemplo:

Mascara: #,##0.00

Entao e setado o limite de 5 inteiros e 2 decimais, e o usuario digita

1234, quando ele digita o 5 o primeiro digito e cortado, e o cursor passa para o lado das cadas decimais.

Eu ja encontrei varias reclamacoes para esse problema, mas nehumma solucao, se alguem ja viu solucao para isso, por favar ajudem

vlw, at+

Criado 15 de julho de 2004
Ultima resposta 17 de jul. de 2004
Respostas 2
Participantes 3