Campo JFotmattedTextField

27 respostas
C

Num frame coloquei dois botões pertencentes ao mesmo grupo (CNPJ e CPF). Já pesquisei bastante e ainda não descobri como fazer para, ao abandonar o botão escolhidos e pasar o foco para um Campo JFotmattedTextField, o mesmo receba a máscara “##.###.###/####-##” para CNPJ ou ###.###.###-## para CPF.

Alguém poderia me dar um help. Desde já agradeço.

27 Respostas

C

Help…

Andre_Brito

Oi.
Como você está fazendo?

Eu sempre setei a máscara na hora me que eu crio a MaskFormatter. Não entendi muito bem, mas dependendo de qual botão for clicado, você cria a máscara de um jeito diferente (dentro dos métodos ActionPerformed mesmo).

C

Quando criei o campo no netBeans 6.1 não formatei nenhuma máscara pelo fato de não saber se o usuário iria optar pelo CNPJ ou pelo CPF, por isso que gostaria de criar tal máscara pelo código, quando o campo ganhasse foco.

Andre_Brito

Oi.
Pois então. Quando o foco for no campo do CNPJ, você cria uma mascará com o jeitão do CNPJ. Ou ainda, como isso vai ser bastante utilizado, acho que você já pode criar duas máscaras diferentes. Aí quando o foco for no campo do CNPJ, você faz assim:

campoCNPJ.setFormatterFactory(maskCNPJ);

Eu não sei direito, mas acredito que seja o método que falei.
Abraço.

C

Vou tentar…ou melhor eu até acho que eu já tentei…vou ver. Depois eu informo se funcionou. Obrigado.

C

Estou usando o código abaixo:

private void txtNrRecFedActionPerformed(java.awt.event.ActionEvent evt) {

if (optCNPJ.isSelected())

try{

fmtCNPJ = newMaskFormatter("##.###.###/####-##");

txtNrRecFed = new JFormattedTextField(fmtCNPJ);

}

catch(Exception e){}

}
C

Mudei o código para o seguinte:

public void itemStateChanged(ItemEvent evt){

if (evt.getSource()==optCNPJ)  {

txtNrRecFed.requestFocus();

try{

fmtCNPJ = newMaskFormatter("##.###.###/####-##");

txtNrRecFed = new JFormattedTextField(fmtCNPJ);

}

catch(Exception e){}

}

}

E ainda não funciona.

C

Ainda não encontrei uma solução. Alguém poderia me ajudar.

M
public void actionPerformed(ActionEvent ev) {
        
        if(ev.getSource() == radioCpf) {
            try {
                mask = new MaskFormatter("###.###.###-##");
            } catch(ParseException ex) { }
                        
        }
        if(ev.getSource() == radioCnpj) {
            try {
                mask = new MaskFormatter("##.###.###/####-##");
            } catch(ParseException ex) { }
                    
        }
        
        field = new JFormattedTextField(mask);
        field.setBounds(20, 80, 120, 20);
        
        container.add(field);
        repaint();
        
        
    }

Acho que isso te ajuda.

C

Estou utilizando o Netbeans 6.1 e coloquei na aplicação o código que vc me passou com algumas alterações, conforme a seguir:

private MaskFormatter mask = null

private void txtNrRecFedActionPerformed(java.awt.event.ActionEvent evt) {

if(evt.getSource()==optCNPJ){

try{

mask = new MaskFormatter("##.###.###/####-##");

}catch(Exception e){}

}

if(evt.getSource()==optCPF){

try{

mask = new MaskFormatter("###.###.###-##");

}catch(Exception e){}

}

txtNrRecFed = new JFormattedTextField(mask);

container.add(txtNrRecFed);

repaint();

// TODO add your handling code here:

}

E ainda assim não funciona. Será que foram al alterações realizadas?

C

Estou utilizando o Netbeans 6.1 e coloquei na aplicação o código que vc me passou com algumas alterações, conforme a seguir:

private MaskFormatter mask = null 

private void txtNrRecFedActionPerformed(java.awt.event.ActionEvent evt) { 
if(evt.getSource()==optCNPJ){ 
try{ 
mask = new MaskFormatter("##.###.###/####-##"); 
}catch(Exception e){} 
} 
if(evt.getSource()==optCPF){ 
try{ 
mask = new MaskFormatter("###.###.###-##"); 
}catch(Exception e){} 
} 
txtNrRecFed = new JFormattedTextField(mask); 
container.add(txtNrRecFed); 
repaint(); 
// TODO add your handling code here: 
}

E ainda assim não funciona. Será que foram alterações realizadas?

C

Desde que me deparei com está dúvida tenho vasculhado a net atrás de uma solução e ainda não a encontrei. Alguém poderia me ajudar?

C

Tô subindo o tópico para ver se alguém me ajuda.

thundercas

Cara, como você diferencia CNPJ de CPF?? São 2 botões diferentes?? Ou são 2 RadioButtons?

Se forem 2 Radios, tem um método específico para identificar a seleção deles, que não é o getSource(). Agora, se estiver usando JButtons, não visualizo nada errado no seu código e to sem Java aqui pra compilar. Não da pra detalhar pra gente o que ta acontecendo??

C

Estou usando dois JRadioButtons. Talvez esse deve ser o motivo do não funcionamento do código. Vou pesquisar.

C

Ainda não consegui acertar o código com dois JRadioButton’s.

C

Sobe pra ver…

thundercas

Então cara, você não pode usar o getSource(), você tem que usar o método que verifica se o RadioButton está selecionado… Não to com Java aqui e to com preguiça de procurar na API, mas é só abrir o seu Eclipse ou NetBeans e pressionar CTRL+SPACE depois de digitar o componente…

C

Mudei o código conforme a seguir para o JRadioButton fosse selecionado, transferisse o foco para o JFormattedTextField txtNrRecFed, mas ainda não está funcionando. Alguém tem uma sugestão?

private void optCNPJActionPerformed(java.awt.event.ActionEvent evt) { 
if(optCNPJ.isSelected()==true)
   txtNrRecFed.requestFocus(); 
   try{ 
       mask = new MaskFormatter("##.###.###/####-##"); 
       txtNrRecFed = new JFormattedTextField(mask);
      }catch(ParseException e){}
   
    // TODO add your handling code here:
correainfo

Cl?dio Rocha post seu codigo inteiro fica melhor para analisar sua situacao…

correainfo
Cl?dio Rocha:
Mudei o código conforme a seguir para o JRadioButton fosse selecionado, transferisse o foco para o JFormattedTextField txtNrRecFed, mas ainda não está funcionando. Alguém tem uma sugestão?
private void optCNPJActionPerformed(java.awt.event.ActionEvent evt) { 
if(optCNPJ.isSelected()==true)
   txtNrRecFed.requestFocus(); 
   try{ 
       mask = new MaskFormatter("##.###.###/####-##"); 
       txtNrRecFed = new JFormattedTextField(mask);
      }catch(ParseException e){}
   
    // TODO add your handling code here:

Cl?dio Rocha post seu codigo inteiro, fica melhor para analisar onde esta o errro

C

A seguir o código em questão:

import java.awt.event.ActionEvent;
import java.text.ParseException;
import javax.swing.JFormattedTextField;
import javax.swing.text.MaskFormatter;

public class TelaEmpresa extends javax.swing.JFrame{ 
        
   private MaskFormatter mask = null;

    /** Creates new form TelaEmpesa */
    public TelaEmpresa() {
        initComponents();

    }

 @SuppressWarnings("unchecked")

//Generate Code

private void txtAutuadoActionPerformed(java.awt.event.ActionEvent evt) {                                           
    optCNPJ.requestFocus();
    // TODO add your handling code here:
}                                          

private void optCNPJActionPerformed(java.awt.event.ActionEvent evt) {                                        
if(optCNPJ.isSelected()==true)
   txtNrRecFed.requestFocus(); 
   try{ 
       mask = new MaskFormatter("##.###.###/####-##"); 
       txtNrRecFed = new JFormattedTextField(mask);
      }catch(ParseException e){}
   
    // TODO add your handling code here:
}                 

  public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new TelaEmpresa().setVisible(true);
            }
        });
    }

    // Variables declaration - do not modify                     
    private javax.swing.JButton cmdGravar;
    private javax.swing.JButton cmdLimpar;
    private javax.swing.JButton cmdSair;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JPanel jPanel2;
    private javax.swing.JPanel jPanel3;
    private javax.swing.JRadioButton optCNPJ;
    private javax.swing.JRadioButton optCPF;
    private javax.swing.JRadioButton optEmbarc;
    private javax.swing.ButtonGroup optGrupoCatAut;
    private javax.swing.ButtonGroup optGrupoRecFed;
    private javax.swing.JRadioButton optTransCarga;
    private javax.swing.JRadioButton optTransPass;
    private javax.swing.JTextField txtAutuado;
    private javax.swing.JFormattedTextField txtNrRecFed;
    // End of variables declaration                   

}
C

Ainda não funciona. Alguém tem uma sugestão.

fantomas

Gente eu acho que o caminho da praia é por aqui ó:

public class TelaEmpresa extends JFrame {
	private static final String MSK_CNPJ = "##.###.###/####-##";
	private static final String MSK_CPF = "###.###.###.##";
		
	private JFormattedTextField txtCodigo = new JFormattedTextField();

	private JRadioButton optCNPJ = new JRadioButton("Cnpj");
	private JRadioButton optCPF = new JRadioButton("Cpf");

	public TelaEmpresa() {
		this.inicializar();
	}
	
	private void inicializar() {
		
		this.txtCodigo.setColumns(25);

		JPanel pnlCodigo = new JPanel(new FlowLayout(FlowLayout.LEFT));
		JPanel pnlTipos = new JPanel(new FlowLayout(FlowLayout.LEFT));

		pnlCodigo.add(new JLabel("Código:"));
		pnlCodigo.add(this.txtCodigo);

		ButtonGroup grupoTipos = new ButtonGroup();

		grupoTipos.add(this.optCNPJ);
		grupoTipos.add(this.optCPF);

		pnlTipos.add(this.optCNPJ);
		pnlTipos.add(this.optCPF);
		
		// ---------------------------->> INICIO DA PARTE QUE INTERESSA <<--------------------------
		
		this.optCNPJ.setSelected(true);
		
		this.txtCodigo.setFormatterFactory(this.obterFormatacao(MSK_CNPJ));

		this.optCNPJ.addActionListener(new ActionListener() {

			public void actionPerformed(ActionEvent e) {
				TelaEmpresa.this.aplicarFormatacao(e);
			}

		});
		
		this.optCPF.addActionListener(new ActionListener() {

			public void actionPerformed(ActionEvent e) {
				TelaEmpresa.this.aplicarFormatacao(e);
			}

		});
		
		// ---------------------------->> FIM DA PARTE QUE INTERESSA <<--------------------------		

		super.getContentPane().add(pnlCodigo, BorderLayout.CENTER);
		super.getContentPane().add(pnlTipos, BorderLayout.SOUTH);

		super.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		super.setSize(400, 90);

		super.setLocationRelativeTo(null);
	}

	// ---------------------------->> INICIO DA PARTE QUE MUITO INTERESSA <<--------------------------
	
	private void aplicarFormatacao(ActionEvent event) {
		String  pic = null;
		
		if (optCNPJ.isSelected() == true) {
			pic = MSK_CNPJ;
		} else {
			pic = MSK_CPF;
		}
		
		this.txtCodigo.setFormatterFactory(this.obterFormatacao(pic));
		
		this.txtCodigo.setValue(null);
		this.txtCodigo.requestFocus();
	}
	
	private DefaultFormatterFactory obterFormatacao(String pic) {
		DefaultFormatterFactory factory = null;
		
		try {
			MaskFormatter formatter = new MaskFormatter(pic);
			factory = new DefaultFormatterFactory(formatter);
		} catch (ParseException e) {
			e.printStackTrace();
		}
		
		return factory;
	}
	
	// ---------------------------->> FIM DA PARTE QUE MUITO INTERESSA <<--------------------------

	public static void main(String[] args) {
		TelaEmpresa empresaView = new TelaEmpresa();
		
		empresaView.setVisible(true);
	}
}

Executei na minha máquina e funcionou, eu juro rsrsrsrsr.

flws

fantomas

Gente eu acho que o caminho da praia é por aqui ó:

public class TelaEmpresa extends JFrame {
	private static final String MSK_CNPJ = "##.###.###/####-##";
	private static final String MSK_CPF = "###.###.###.##";
		
	private JFormattedTextField txtCodigo = new JFormattedTextField();

	private JRadioButton optCNPJ = new JRadioButton("Cnpj");
	private JRadioButton optCPF = new JRadioButton("Cpf");

	public TelaEmpresa() {
		this.inicializar();
	}
	
	private void inicializar() {
		
		this.txtCodigo.setColumns(25);

		JPanel pnlCodigo = new JPanel(new FlowLayout(FlowLayout.LEFT));
		JPanel pnlTipos = new JPanel(new FlowLayout(FlowLayout.LEFT));

		pnlCodigo.add(new JLabel("Código:"));
		pnlCodigo.add(this.txtCodigo);

		ButtonGroup grupoTipos = new ButtonGroup();

		grupoTipos.add(this.optCNPJ);
		grupoTipos.add(this.optCPF);

		pnlTipos.add(this.optCNPJ);
		pnlTipos.add(this.optCPF);
		
		// ---------------------------->> INICIO DA PARTE QUE INTERESSA <<--------------------------
		
		this.optCNPJ.setSelected(true);
		
		this.txtCodigo.setFormatterFactory(this.obterFormatacao(MSK_CNPJ));

		this.optCNPJ.addActionListener(new ActionListener() {

			public void actionPerformed(ActionEvent e) {
				TelaEmpresa.this.aplicarFormatacao(e);
			}

		});
		
		this.optCPF.addActionListener(new ActionListener() {

			public void actionPerformed(ActionEvent e) {
				TelaEmpresa.this.aplicarFormatacao(e);
			}

		});
		
		// ---------------------------->> FIM DA PARTE QUE INTERESSA <<--------------------------		

		super.getContentPane().add(pnlCodigo, BorderLayout.CENTER);
		super.getContentPane().add(pnlTipos, BorderLayout.SOUTH);

		super.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		super.setSize(400, 90);

		super.setLocationRelativeTo(null);
	}

	// ---------------------------->> INICIO DA PARTE QUE MUITO INTERESSA <<--------------------------
	
	private void aplicarFormatacao(ActionEvent event) {
		String  pic = null;
		
		if (optCNPJ.isSelected() == true) {
			pic = MSK_CNPJ;
		} else {
			pic = MSK_CPF;
		}
		
		this.txtCodigo.setFormatterFactory(this.obterFormatacao(pic));
		
		this.txtCodigo.setValue(null);
		this.txtCodigo.requestFocus();
	}
	
	private DefaultFormatterFactory obterFormatacao(String pic) {
		DefaultFormatterFactory factory = null;
		
		try {
			MaskFormatter formatter = new MaskFormatter(pic);
			factory = new DefaultFormatterFactory(formatter);
		} catch (ParseException e) {
			e.printStackTrace();
		}
		
		return factory;
	}
	
	// ---------------------------->> FIM DA PARTE QUE MUITO INTERESSA <<--------------------------

	public static void main(String[] args) {
		TelaEmpresa empresaView = new TelaEmpresa();
		
		empresaView.setVisible(true);
	}
}

Executei na minha máquina e funcionou, eu juro rsrsrsrsr.

flws

C

Vou testar mas desde já muito obrigado. Muito engraçada sua postagem…

C

Funcionou perfeitamente. Muitissímo Obrigado.

Criado 5 de novembro de 2008
Ultima resposta 13 de nov. de 2008
Respostas 27
Participantes 6