RESOLVIDO - Limitar caracteres em JFormattedTextField

4 respostas
G

Olá denovo venho pedir encarecidamente como limitar os caracteres em um jformattedTextfield, nas propriedades eu não consegui indico o valor ele automaticamente retorna ao 0, nem mesmo usando a mesma função de limitar que utilizei no jtextfield

4 Respostas

thiago.correa

Cara dá uma olhada nisso

import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import java.io.IOException;

import javax.swing.JFrame;
import javax.swing.JTextField;


class Class3 extends JFrame {

    JTextField f = new JTextField();

    public Class3() {
        this.setVisible(true);
        add(f);
        
        f.addKeyListener(new KeyListener() {
                    
                    public void keyTyped(KeyEvent e) {
                        String texto = f.getText();    
                        if(texto != null && texto.length() == 10) {
                            e.consume();
                        }
                        

                    }

                    public void keyPressed(KeyEvent e) {
                    }

                    public void keyReleased(KeyEvent e) {
                    }
                });
        
        setVisible(true);
        pack();
        setDefaultCloseOperation(EXIT_ON_CLOSE);
    }
    public static void main(String[] args) throws IOException {
        new Class3();
    }
}
G

essa é a única forma ??? :frowning:

essa é a forma que eu estou usando e dai na declaração do componente eu uso ela e acho uma forma elegante de se fazer o código

public class LimitadorTexto extends PlainDocument 
    {    
         private int limite = 0;
         public LimitadorTexto(int l)
           {        
             this.limite = l;    
           }    
         public void insertString(int offs, String str, AttributeSet a) throws BadLocationException
           {        
             int sobra = limite - getLength();        
             int comprimento =  ( sobra > str.length() ) ? str.length() : sobra;       
             super.insertString(offs, str.substring(0, comprimento), a);    
           }
    }

mas o formattedtextfield na sua declaração não é instânciavel a mascara ##/##/#### seria uma solução

G

esteé a forma que estou fazendo porém não está dando mais certo

public void FormataCampoData(JFormattedTextField Componente)  {
     try
       {
        MaskFormatter FormatoData = new MaskFormatter("##/##/####");
        FormatoData.install((JFormattedTextField)Componente);
        
        jftData = (JFormattedTextField)Componente;      
        Componente.addFocusListener(new FocusAdapter() {
                    JFormattedTextField bbb = jftData; 
                    public void focusLost(FocusEvent e) {
                     if(bbb.getText().equals("  /  /    ")==false){
                        String[] strData = getData().split("/");
                        String[] strDataDigitada = bbb.getText().split("/");
                       
                        String[] texto =  new String[]{"","",""};
                        if(strDataDigitada[0].equals("") || strDataDigitada[0].equals("  ") || strDataDigitada[0].equals(" ")){                            
                            texto[0] = strData[0];
                        }else{
                            texto[0] = strDataDigitada[0];
                        }
                        if(strDataDigitada[1].equals("") || strDataDigitada[1].equals("  ") || strDataDigitada[1].equals(" ")){
                            texto[1] = strData[1];
                        }else{
                            texto[1] = strDataDigitada[1];
                        }
                        if(strDataDigitada[2].equals("") || strDataDigitada[2].equals("    ") || strDataDigitada[2].equals(" ")){
                            texto[2] = strData[2];
                        }else{
                          if(strDataDigitada[2].trim().length()<4){                            
                            texto[2] = strData[2].substring(0,4-strDataDigitada[2].trim().length()) + strDataDigitada[2].trim();
                          }else{
                             texto[2] = strDataDigitada[2];  
                          }
                        }
                        bbb.setText((texto[0]+"/"+texto[1]+"/"+texto[2]));
                     }
                    }
                   });
        Componente.setText(getData());        
       }
     catch(Exception ex)  
     {JOptionPane.showMessageDialog(null,ex.getMessage(),"ERRO AO INSERIR FORMATO DE DATA",JOptionPane.ERROR_MESSAGE);}
    
    }
G

O USO de uma mascara pelo campo foi a solução

Criado 5 de maio de 2009
Ultima resposta 7 de mai. de 2009
Respostas 4
Participantes 2