[Resolvido] Atribuindo duas máscaras para um mesmo campo

7 respostas
C

Boa noite pessoal, tenho um ComboBox que define o tipo de pessoa entre Física e Jurídica e estou com a seguinte dificuldade, como devo desenvolver uma classe para o campo onde deverá ser armazenado um CPF/CNPJ com a sua respectiva máscara sendo alterada de acordo com o item selecionado no ComboBox, abaixo segue a classe do ComboBox

public class MeuComboBoxTipoPessoa extends JComboBox implements MeuComponente {

    private String dica;
    private boolean obrigatorio;

    public MeuComboBoxTipoPessoa (String dica, boolean obrigatorio) {
        this.dica = dica;
        this.obrigatorio = obrigatorio;
        addItem("Física");
        addItem("Jurídica");
    }

    public void limpar() {
        setSelectedIndex(0);
    }

    public boolean eObrigatorio() {
        return obrigatorio;
    }

    public boolean eValido() {
        return true;
    }

    public boolean eVazio() {
        return false;
    }

    public String getDica() {
        return dica;
    }

    public void setText(String valor) {
        if (valor.equals("Física")) {
            String.format(valor, "Física");
        } else {
            String.format(valor, "Jurídica");
        }
    }

    public String getText() {
        if (getSelectedIndex() == 0) {
            return "Física";
        } else {
            return "Jurídica";
        }
    }
}

Desde já agradeço!

7 Respostas

F

Basta vc pegar o item selecionado do JCombo e comparar.

Veja:

if(meuCombo.getSelectedItem().toString().equals("Fisica"){
    //mascara pessoa fisica
}else{
   //mascara pessoa juridica
}

t+ e boa sorte.

Y

acho que sua duvida é alterar a mascara em tempo de execução né?
vc tem que usar o FormatterFactory.

veja:

import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.ParseException;

import javax.swing.DefaultComboBoxModel;
import javax.swing.JComboBox;
import javax.swing.JFormattedTextField;
import javax.swing.JFrame;

import javax.swing.text.DefaultFormatterFactory;
import javax.swing.text.MaskFormatter;



public class GujTeste extends JFrame {

	private JFormattedTextField txt;
	private JComboBox cb;
	private MaskFormatter ms;
	private MaskFormatter ms2;

	public GujTeste() {

		super("TESTE");
		this.setLayout(new FlowLayout());
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

		cb = new JComboBox();
		cb.setModel(new DefaultComboBoxModel(new String[] { "", "Fisica","Juridica" }));
		cb.addActionListener(new util());
		txt = new JFormattedTextField();
		txt.setColumns(15);
		try {
			ms = new MaskFormatter("##/##/##/##");
			ms2 = new MaskFormatter("##-##--###");
		} catch (ParseException e) {

			e.printStackTrace();
		}
		this.add(cb);
		this.add(txt);
		this.setSize(300, 100);
		this.setResizable(false);

	}

	public static void main(String[] args) {

		new GujTeste().setVisible(true);
	}

	private class util implements ActionListener {

		@Override
		public void actionPerformed(ActionEvent e) {
			if (cb.getSelectedItem().equals("Fisica")) 
				txt.setFormatterFactory(new DefaultFormatterFactory(ms));
			
			if (cb.getSelectedItem().equals("Juridica"))
				txt.setFormatterFactory(new DefaultFormatterFactory(ms2));
		}
	}
}
C

Obrigado yhhik, vou verificar!

C

Da forma que está realmente funciona yhhik, mas a forma que estou tentando fazer é diferente, pretendo criar outra classe para o campo que irá receber o CPF ou CNPJ. Tenho isso pronto:

package Componentes;

import Estrutura.MeuComponente;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JOptionPane;
import javax.swing.text.MaskFormatter;

public class MeuCPFCNPJ extends MeuJFormattedTextField implements MeuComponente, ActionListener  {
    private String pessoa;
    private MaskFormatter mfCpf, mfCnpj;

    public MeuCPFCNPJ(String dica, boolean obrigatorio) {
        super(dica, obrigatorio, 11);
        try {
            mfCpf = new MaskFormatter("###.###.###-##");
            mfCnpj = new MaskFormatter("##.###.###/####-##");
        } catch (Exception e) {
            JOptionPane.showMessageDialog(null, "Não foi possível carregar a máscara do MeuCPFCNPJ");
            e.printStackTrace();
        }
    }
    
    public void actionPerformed(ActionEvent e) {
        
    }

    public void setMascara(String pessoa) {
        if (pessoa.equals("Física")) {
            mfCpf.install(this);
        } else if (pessoa.equals("Jurídica")) {
            mfCnpj.install(this);
        } else {
            JOptionPane.showMessageDialog(null, "Não foi possível definir a máscara do MeuCPFCNPJ");
        }
    }
}

A minha dificuldade está em como fazer essa classe receber o valor do BomboBox da outra classe (os valores “Física” ou “Jurídica”) de forma que o método setMascara possa alterar a máscara segundo a definição no ComboBox.

Se alguém souber, ficarei grato!
Até mais!

Y

passe pelo construtor.

C

Cara, tentei mas só funciona se eu passar pelo construtor da classe Cadastro de Cliente, pela classe MeuCpfCnpj ele não está executando :confused:

J

ignore o q eu disse aki, falei bestera XD

Criado 12 de fevereiro de 2012
Ultima resposta 19 de fev. de 2012
Respostas 7
Participantes 4