Oi,
Adicionei dois jFormattedTextField (jTelef e um jDat) no meu frame. criei as máscaras e no evento formComponentShown executo o método Mascara(), mas não acontece nada.
import java.text.ParseException;
import javax.swing.JFormattedTextField;
import javax.swing.text.MaskFormatter;
private MaskFormatter fTelefone;
private MaskFormatter fData;
public void Mascara() throws ParseException{
fTelefone = new MaskFormatter("####-####");
fData = new MaskFormatter("##/##/####");
jTelef = new JFormattedTextField(fTelefone);
jDat = new JFormattedTextField(fData);
}
Crie os componentes (JFormattedTextfields) usando as mascaras.
Quando seu frame ficar visivel eles vão estar funcionando.
Exemplo:
[code]import javax.swing.JFormattedTextField;
import javax.swing.JFrame;
import javax.swing.text.MaskFormatter;
public class Frame extends JFrame {
private JFormattedTextField jFormattedTextField;
public Frame() {
try {
MaskFormatter mask = new MaskFormatter("####-####");
jFormattedTextField = new JFormattedTextField(mask);
mask = null;
} catch (Exception e) {
}
getContentPane().add(jFormattedTextField);
pack();
setVisible(true);
}
public static void main(String[] args) {
new Frame();
}
}[/code]
Esquece esse formComponentShown. É gambiarra!
Caso esteja usando o Netbeans. Customize o código de criação das JFormattedTextfield.
try {
MaskFormatter mask = new MaskFormatter("####-####");
jFormattedTextField = new JFormattedTextField(mask);
mask = null;
} catch (Exception e) {
}
Coloquei, mas não altera nada. Quando o usuário vai digitar o telefone, não aparece no formato da máscara. Fica como se fosse um jTextField comum.
public Cadadastra_Cliente() {
initComponents();
try {
MaskFormatter mask = new MaskFormatter("####-####");
jTelefone = new JFormattedTextField(mask);
mask = null;
} catch (Exception e) {
}
}
Rodou o exemplo que eu postei?
Rodei outros exemplos que estão funcionando.
Meu sistema está assim:
Menu:
private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {
CadastraCliente form_Cliente = new CadastraCliente();
form_Cliente.setVisible(true);
}
No CadastraCliente:
public CadadastraCliente() {
initComponents();
try {
MaskFormatter mask = new MaskFormatter("(##)####-####");
JFormattedTextField jft_Telefone = new JFormattedTextField(mask);
jft_Telefone.setColumns(13);
mask = null;
} catch (Exception e) {
}
}
estou usando o NetBeans.
Ja adicionei neste projeto uma classe com o seguinte exemplo:
import java.awt.FlowLayout;
import java.text.ParseException;
import javax.swing.JFormattedTextField;
import javax.swing.JFrame;
import javax.swing.text.MaskFormatter;
public class TextFieldComMascara extends JFrame {
private JFormattedTextField telefone;
private JFormattedTextField data;
private MaskFormatter ftmTelefone;
private MaskFormatter ftmData;
public TextFieldComMascara() throws ParseException{
ftmTelefone = new MaskFormatter("####-####");
ftmData = new MaskFormatter("##/##/####");
telefone = new JFormattedTextField(ftmTelefone);
data = new JFormattedTextField(ftmData);
ftmTelefone.setValidCharacters("0123456789");
ftmData.setValidCharacters("0123456789");
telefone.setColumns(6);
data.setColumns(6);
add(telefone);
add(data);
setLayout(new FlowLayout());
setDefaultCloseOperation(DISPOSE_ON_CLOSE);
setSize(200, 200);
setVisible(true);
}
public static void main(String[] args) {
try {
TextFieldComMascara teste = new TextFieldComMascara();
}catch (ParseException e) {
e.printStackTrace();
}
}
}
Também está funcionando.
Mas quando eu passo para minha classe o JFormattedTextField, não fica formatado. Será por que eu criei a frame no Netbeans? Pois no exemplo acima está sendo criado todo no main().
Criei o exemplo que você enviou, mas não aparece nada.
package teste;
import java.text.ParseException;
import javax.swing.JFormattedTextField;
import javax.swing.text.MaskFormatter;
public class Mascara extends javax.swing.JFrame {
private MaskFormatter fTelefone;
private MaskFormatter fData;
public void Mascara() throws ParseException{
initComponents();
fTelefone = new MaskFormatter("####-####");
fData = new MaskFormatter("##/##/####");
jTelef = new JFormattedTextField(fTelefone);
jDat = new JFormattedTextField(fData);
}
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
jTelef = new javax.swing.JFormattedTextField();
jDat = new javax.swing.JFormattedTextField();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
jTelef.setText("jFormattedTextField1");
jDat.setText("jFormattedTextField1");
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(127, 127, 127)
.addComponent(jTelef, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGroup(layout.createSequentialGroup()
.addGap(137, 137, 137)
.addComponent(jDat, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
.addContainerGap(154, Short.MAX_VALUE))
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(63, 63, 63)
.addComponent(jTelef, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(18, 18, 18)
.addComponent(jDat, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(179, Short.MAX_VALUE))
);
pack();
}// </editor-fold>
/**
* @param args the command line arguments
*/
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new Mascara().setVisible(true);
}
});
}
// Variables declaration - do not modify
private javax.swing.JFormattedTextField jDat;
private javax.swing.JFormattedTextField jTelef;
// End of variables declaration
}
Outra dúvida:
Quando o Frame aparecer o JFormattedTextField já aparece formatado? ou ele só formata depois que o usuário digitar os dados?