Jtextfield mascara-ajuda

12 respostas
M

Fala galera tudo bom??

Eu sou novo aqui, e o primeira vez q eu crio um topico, mas sempre entro aki pra procurar informacoes, mas dessa vez nao encontrei oq eu precisava, e ja tem uns 3 dias q eu to agarrado nesse problema…

o meu problema e o seguinte, eu preciso mascarar um jtextfield para q aceite somente numeros, 1(UMA) virgula, e q tenha limites de caracters(4 caracteres antes da virgula, e 5 depois)…
ex: a pessoa pode digitar 1,12344, 12,123, 4389,09876, etc… ou seja como isso nao posso usar jformatedtext (tipo ****,*****)

eu ja axei metodos pra fazer tudo isso so q individualmente, tipo limitar o numero de caracteres, ou limitar o numero de virgulas, mas nao consigo de jeito nenhum fazer todas essas condicoes juntas…

e se alguem suber tb, se tem algum jeito de eu limitar o valor de entrada, tipo o maior valor de entrada ser 1500,00000 mas isso e secundario

agradeco a ajuda de todos
abracos

12 Respostas

fabricioempresa

Você usa Netbeans ou Eclipse?

M

Eclipse

fabricioempresa

Cara seguite eu uso netbeans e consigo colocar mascaras com as seguintes configurações

Botao direito no JtextField e em propriedades formatterFactory ai adiciona a máscara que tu precisa.

No eclipese deve ter algo assim

Vlw

M

fabricioempresa:
Cara seguite eu uso netbeans e consigo colocar mascaras com as seguintes configurações

Botao direito no JtextField e em propriedades formatterFactory ai adiciona a máscara que tu precisa.

No eclipese deve ter algo assim

Vlw

valeu pela dica, mas nao axei nada do tipo nao…
abracos

fabricioempresa

Bah cara procura no google por mascaras no eclipse

Por que é muito mais simples que implementar o código na mão.

Vlw

ViniGodoy

Tente isso aqui:

import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
import javax.swing.text.PlainDocument;

public class FixedLengthDocument extends PlainDocument {
    private int maxLength;

    public FixedLengthDocument(int maxlen) {
        super();
        
        if (maxlen <= 0)
            throw new IllegalArgumentException("You must specify a maximum length!");
        
        maxLength = maxlen;
    }

    @Override
    public void insertString(int offset, String str, AttributeSet attr) 
    throws BadLocationException {
        if (str == null || getLength() == maxLength)
            return;

        int totalLen = (getLength() + str.length());
        if (totalLen <= maxLength) {
            super.insertString(offset, str, attr);
            return;
        }
        
        String newStr = str.substring(0, (maxLength - getLength()));
        super.insertString(offset, newStr, attr);
    }
}
import  javax.swing.text.AttributeSet;  
 import javax.swing.text.BadLocationException;  
   
 public class IntegerWithOneCommaDocument extends FixedLengthDocument {  
     public IntegerWithOneCommaDocument (int maxlen) {  
         super(maxlen);  
     }  
   
     @Override  
     public void insertString(int offset, String str, AttributeSet attr)  
             throws BadLocationException {  
         if (str == null)  
             return;  

         //Se já houver uma vírgula, não insere outra vígula.
         if (str.contains(","))
         {
               String text = getText(0, getLength());
               if (text.contains(","))
                    str = str.replace(",", "");
         }

         try {  
             Integer.parseInt(str);  
         } catch (Exception e) {  
             return;  
         }  
           
         super.insertString(offset, str, attr);  
     }  
 }

Para usar:

seuTextField.setDocument(new IntegerWithOneCommaDocument(4));

Onde 4 é o número máximo de caracteres do JTextField.

M

respondendo: ViniGodoy

obrigado pela ajuda, mas desse jeito nao ta deixando eu digitar nenhuma virgula.
vou tentar “concertar” aqui, se tiver alguma outra ideia, me fala por favor
obrigado
abracos

M

O problema do metodo que vc me passou esta no try and catch, se eu tirrar ele, o programa aceita so 1 virgula, mais ai aceita tb, letras, etc…
vc sabe como eu poderia resolver isso??
obrigado
abracos

M

ninguem sabe como resolver esse problema nao??
no codigo do vini, se eu fizer isso, eu consigo elimar a letra “a”, alguem sabe como eu posso fazer pra eliminar todas???

if (str.contains(","))  
      {  
         String text = getText(0, getLength());  
         if (text.contains(","))  
            str = str.replace(",", "");  
      }  
      
      if ( str.contains("a")){  
      
            str = str.replace("a", "");  
           
      }

obrigado

M
Problema resolvido

a classe ficou assim

public class IntegerWithOneCommaDocument extends FixedLengthDocument {

public IntegerWithOneCommaDocument (int maxlen) {

super(maxlen);

}
public void insertString(int offset, String str, AttributeSet attr)    
         throws BadLocationException {    
     if (str == null)    
         return;    

     //Se já houver um ponto, não insere outro ponto.  
     if (str.contains("."))  
     {  
           String text = getText(0, getLength());  
           if (text.contains("."))  
                str = str.replace(".", "");  
     } 
     
     
     if (str.matches("[0-9.]*+"))  { // aceita numeros de 0-9 e um . (PONTO)
       super.insertString(offset, str, attr);    
     }
     
     {  


   }   
     
 
 }
C

Estou com um problema parecido. Não sabia dessa história do setDocument()… Acho muito estranho o tutorial da Sun não falar nada do setDocument():

http://java.sun.com/docs/books/tutorial/uiswing/components/formattedtextfield.html

M

qual e o seu problema??precisa de alguma ajuda??
abracos

Criado 24 de março de 2010
Ultima resposta 30 de mar. de 2010
Respostas 12
Participantes 4