Buenas amigos, estou com uma dúvida de como posso resolver este problema.
Tenho uma JComboBox onde existe a opção de pessoa físca e jurídica. Gostaria de fazer com que a máscara de um JTextField variasse conforme a opção selecionada. Sei que é através de um ActionListener na combo, mas como modifico a máscara?
Grato!
Mudar máscara de um JTextField conforme opção em uma JComboBox
3 Respostas
JTextField.setFormatterFactory(new javax.swing.text.DefaultFormatterFactory(new javax.swing.text.NumberFormatter(new java.text.DecimalFormat("#0.00"))));
Esse é um jeito de implantar uma máscara de valor em um campo texto, acredito que seja só repetí-lo com outro formato que a máscara muda.
Olá hugosg, obrigado pela resposta e desculpe-me pela demora. Mas não obtive sucesso.
jtfcpf = new JFormattedTextField(new MaskFormatter(
"###.###.###-##"));
Eu consigo adicionar uma máscara no JTextField tranquilamente assim, mas não substituí-la quando mudada a opção no ActionListener da JComboBox.
Grato 
olá,
veja um exemplo-teste feito no netbeans.
Cria um Formulário JFrame.
Cria 2 ou mais atributos do tipo javax.swing.text.MaskFormatter na sua classe (cada um será uma das máscaras possívei)
Adiciona os radiobuttons, um para cada máscara.
Adiciona um radiogroup e faça com que os radiobuttons façam parte desse mesmo radiogroup.
No construtor do formulário tu inicializa as máscaras.
para cada radiobutton, crie um ActionListener.
em cada listener, tu desinstala as máscaras, exceto a que vc quer aplicar e então instala a máscara correspondente.
segue o código-fonte:
package masks;
import java.text.ParseException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.text.MaskFormatter;
public class TesteMsk extends javax.swing.JFrame {
private MaskFormatter mask01;
private MaskFormatter mask02;
public TesteMsk() {
initComponents();
try {
// inicializa as mascaras possiveis
mask01 = new MaskFormatter("##/##/####");
mask01.setPlaceholderCharacter('_');
mask02 = new MaskFormatter("##-###-####");
mask02.setPlaceholderCharacter('_');
} catch (ParseException ex) {
Logger.getLogger(TesteMsk.class.getName()).log(Level.SEVERE, null, ex);
}
}
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
buttonGroup1 = new javax.swing.ButtonGroup();
option01 = new javax.swing.JRadioButton();
option02 = new javax.swing.JRadioButton();
jFormattedTextField1 = new javax.swing.JFormattedTextField();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
setName("Form"); // NOI18N
buttonGroup1.add(option01);
org.jdesktop.application.ResourceMap resourceMap = org.jdesktop.application.Application.getInstance(masks.MasksApp.class).getContext().getResourceMap(TesteMsk.class);
option01.setText(resourceMap.getString("option01.text")); // NOI18N
option01.setName("option01"); // NOI18N
option01.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
option01ActionPerformed(evt);
}
});
buttonGroup1.add(option02);
option02.setText(resourceMap.getString("option02.text")); // NOI18N
option02.setName("option02"); // NOI18N
option02.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
option02ActionPerformed(evt);
}
});
jFormattedTextField1.setText(resourceMap.getString("jFormattedTextField1.text")); // NOI18N
jFormattedTextField1.setName("jFormattedTextField1"); // NOI18N
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jFormattedTextField1, javax.swing.GroupLayout.DEFAULT_SIZE, 93, Short.MAX_VALUE)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
.addComponent(option02, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(option01, javax.swing.GroupLayout.Alignment.LEADING)))
.addContainerGap())
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(option01)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(option02)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(jFormattedTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
pack();
}// </editor-fold>
private void option01ActionPerformed(java.awt.event.ActionEvent evt) {
mask02.uninstall();
mask01.install(jFormattedTextField1);
}
private void option02ActionPerformed(java.awt.event.ActionEvent evt) {
mask01.uninstall();
mask02.install(jFormattedTextField1);
}
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new TesteMsk().setVisible(true);
}
});
}
// Variables declaration - do not modify
private javax.swing.ButtonGroup buttonGroup1;
private javax.swing.JFormattedTextField jFormattedTextField1;
private javax.swing.JRadioButton option01;
private javax.swing.JRadioButton option02;
// End of variables declaration
}
O método initComponents() é gerado pelo netbeans, então, para entender apenas observe o construtor e os listeners.
[]s