Colocando exceção [resolvido]

6 respostas
D

outra dúvida. Eu tenho duas classes, uma que limita o número de caracter numa jtextfield e outra que faz com que o jtextfield aceite somente números, porém nessa segunda classe eu queria abrir uma exceção para ela aceitar os seguintes caracteres: o ponto ( . ) e o hífen ( - ). Alguém saberia implementar essa classe para que ela aceite essas duas exceções.

//código que limita os caracteres está ok
import javax.swing.text.*;

public class LimitaCaracter extends PlainDocument {
     private int iMaxLength;

     public LimitaCaracter(int maxlen) {
         super();
         iMaxLength = maxlen;
     }

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

         if (iMaxLength <= 0)        // aceitara qualquer no. de caracteres
         {
             super.insertString(offset, str, attr);
             return;
         }

         int ilen = (getLength() + str.length());
         if (ilen <= iMaxLength)    // se o comprimento final for menor...
             super.insertString(offset, str, attr);   // ...aceita str
     }

}
//Essa é a classe que eu queria que aceitasse as exceções

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

public class CampoNumerico extends LimitaCaracter {

     public CampoNumerico(int maxlen) {
         super(maxlen);
     }

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

         try {
             Integer.parseInt(str);
         } catch (Exception e) {
             return;
         }

         super.insertString(offset, str, attr);
     }
}

6 Respostas

rodrigo.turini
Mas neste caso, não seria interessante utilizar uma mascara? De uma olhada neste exemplo, e veja se ajuda.
import javax.swing.*;
import javax.swing.text.*;
import java.awt.*;
import java.awt.event.*;
import java.text.*;

public class ExemploJFormattedTextField extends JFrame{
JLabel rotulocep,rotulotel,rotulocpf,rotulodata;
JFormattedTextField cep,tel, cpf, data;
MaskFormatter mascaracep,mascaratel, mascaracpf, mascaradata;

public ExemploJFormattedTextField(){

super("Exemplo com JFormattedTextField");
Container tela = getContentPane();
setLayout(null);
rotulocep = new JLabel("CEP: ");
rotulotel = new JLabel("Telefone: ");
rotulocpf = new JLabel("CPF: ");
rotulodata = new JLabel("Data: ");
rotulocep.setBounds(50,40,100,20);
rotulotel.setBounds(50,80,100,20);
rotulocpf.setBounds(50,120,100,20);
rotulodata.setBounds(50,160,100,20);

try{
mascaracep = new MaskFormatter("#####-###");
mascaratel = new MaskFormatter("(##)####-####");
mascaracpf = new MaskFormatter("#########-##");
mascaradata = new MaskFormatter("##/##/####");
mascaracep.setPlaceholderCharacter(?_?);
mascaratel.setPlaceholderCharacter(?_?);
mascaracpf.setPlaceholderCharacter(?_?);
mascaradata.setPlaceholderCharacter(?_?);
}
catch(ParseException excp){}
cep = new JFormattedTextField(mascaracep);
tel = new JFormattedTextField(mascaratel);
cpf = new JFormattedTextField(mascaracpf);
data = new JFormattedTextField(mascaradata);
cep.setBounds(150,40,100,20);
tel.setBounds(150,80,100,20);
cpf.setBounds(150,120,100,20);
data.setBounds(150,160,100,20);

tela.add(rotulocep);
tela.add(rotulotel);
tela.add(rotulocpf);
tela.add(rotulodata);
tela.add(cep);
tela.add(tel);
tela.add(cpf);
tela.add(data);
setSize(400, 250);
setVisible(true);
}

public static void main(String args[]){
ExemploJFormattedTextField app = new ExemploJFormattedTextField();
app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
Eric_Yuzo

Pode ser feito um replaceAll para eliminar os caracteres que não sejam números, ponto ou hífen.

super.insertString(offs, str.replaceAll("[^0-9|\.|-]", ""), attr);
D

rodrigo.turini, eu não posso usar a mascara porque quando eu rodo o programa ele já fica com os caracteres da mascara no campo e o campo não pode conter nenhum caracter de inicio, pois se a pessoa não digitar nada no campo ele tem que retorna uma mensagem dizendo que o campo é obrigatório.

exemplo:
tenho o campo cpf
uso a mascara …("###.###.###-##");
nesse caso ele já inicia o campo com [ . . - ]

e eu num queria que ele aparecesse os caracteres da mascara logo de inicio, pois usei uma condição de campo null que no caso retornaria uma mensagem dizendo que o campo é obrigatório.
enfim se num tiver jeito eu tiro essa condição e uso as mascaras.
Vlw assim mesmo

D

eric yuzo, como ficaria isso implementado no meu código, tentei aqui só que num deu muito certo não. Tipo, se eu digitasse o numero 2 ele setava outro 2.

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

         super.insertString(offset, str.replaceAll("[^0-9|\.|-]", ""), attr);
     }
D

vlw eric yuzo, deu certim…

Criado 31 de outubro de 2010
Ultima resposta 31 de out. de 2010
Respostas 6
Participantes 3