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

7 respostas
CarlosFontana

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

fernandopaiva

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.

yhhik

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));
		}
	}
}
CarlosFontana

Obrigado yhhik, vou verificar!

CarlosFontana

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!

yhhik

passe pelo construtor.

CarlosFontana

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

jvkirk

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