Alguém sabe algum método para criar mascara de formato em JOptionPane?
O código da lina resolveu…Só que agora tem outro problema,
está aparecendo 2 campos de textos, um com a formatação do JFormattedTextField, e outro campo sem a formatação.
Alguém sabe algum método para criar mascara de formato em JOptionPane?
O código da lina resolveu…Só que agora tem outro problema,
está aparecendo 2 campos de textos, um com a formatação do JFormattedTextField, e outro campo sem a formatação.
Oi,
Você poderá mudar o tipo de campo utilizado pelo JOptionPane.:
JOptionPane.showInputDialog(null,new JFormattedTextField());
JOptionPane.showConfirmDialog(null,new JPasswordField());
Então, você poderá atribuir um format para o TextField e passa-lo a utilizar na janela.
Tchauzin!
[quote=Raulen Rodrigues da Cunha]Alguém sabe algum método para criar mascara de formato em JOptionPane?
O código da lina resolveu…Só que agora tem outro problema,
está aparecendo 2 campos de textos, um com a formatação do JFormattedTextField, e outro campo sem a formatação.[/quote]
Boa noite a todos.
Também percebi isto.
Então eu resolvi criar o meu próprio Frame extendido de JDialog o qual o defini com o JFormattedTexField, desta forma:
import java.awt.Component;
import java.awt.Font;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFormattedTextField;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.text.MaskFormatter;
public class InputMask extends JDialog implements ActionListener {
private JLabel prompt = null;
private MaskFormatter msk = null;
private JFormattedTextField text = null;
private JButton ok, cancel;
private Font font = null;
private String response = null;
// Declaração do Layout e constraints do Layout
private GridBagLayout layout;
private GridBagConstraints constraints;
private final int horizontal = GridBagConstraints.HORIZONTAL;
public InputMask(JFrame parent, String aprompt, String title, String mask){
super(parent, title, true);
layout = new GridBagLayout();
setLayout(layout);
constraints = new GridBagConstraints();
font = new Font("Tahoma", 0, 14);
constraints.weightx = 0; constraints.weighty = 0;
constraints.insets = new Insets(5,5,5,5);
setResizable(false);
setLocationRelativeTo(this);
prompt = new JLabel(aprompt);
prompt.setFont(font);
addComponent(prompt,1,0,2,1,horizontal);
try {
msk = new MaskFormatter(mask);
msk.setPlaceholderCharacter('_');
} catch (Exception ex){
JOptionPane.showMessageDialog(this, ex.getMessage());
}
text = new JFormattedTextField(msk);
text.setFont(font);
text.setColumns(10);
addComponent(text,2,0,2,1,horizontal);
ok = new JButton("OK");
ok.addActionListener(this);
addComponent(ok,3,0,1,1,horizontal);
cancel = new JButton("Cancelar");
cancel.addActionListener(this);
addComponent(cancel,3,1,1,1,horizontal);
setDefaultCloseOperation(DISPOSE_ON_CLOSE);
pack();
setVisible(true);
}
private void addComponent(Component comp, int row, int column, int width, int height, int fill){
constraints.fill = fill;
constraints.gridx = column;
constraints.gridy = row;
constraints.gridwidth = width;
constraints.gridheight = height;
layout.setConstraints(comp, constraints);
this.add(comp);
}
@Override
public void actionPerformed(ActionEvent e) {
if (e.getSource()==ok){
setResponse(text.getText());
} else if (e.getSource()==cancel){
setResponse("");
}
setVisible(false);
dispose();
}
public String getResponse() {
return response;
}
public void setResponse(String response) {
this.response = response;
}
}
Agora voce cria uma função dentro do seu frame principal, ou onde voce quiser que vá invocar esse JDialog assim:
public String inputBox(Component caller, String mens, String title, String mask){
InputMask imask = new InputMask(this, mens, title, mask);
return imask.getResponse();
}
Depois é só chamar a função passando a máscara que voce quiser, o título e a mensagem que quiser, assim:
....
String resp = inputBox(this, "Digite um valor para data", "Pesquisa de data", "##/##/####");
....
Comentários:
A classe InputMask extende (herda) de um JDialog e por isso ela permite ser um Frame Modal, onde o foco trava nela, é libera somente quando voce click num dos botões “OK” ou “Cancelar”, simulando assim um JOptionPane.showInputDialog.
Olá, sou eu de novo.
Permitam fazer uma pequena correção do meu código na classe InputMask.
Onde se lê:
try {
msk = new MaskFormatter(mask);
msk.setPlaceholderCharacter('_');
} catch (Exception ex){
JOptionPane.showMessageDialog(this, ex.getMessage());
}
Substitua por:
if (!"".equals(mask)){
try {
msk = new MaskFormatter(mask);
msk.setPlaceholderCharacter('_');
} catch (Exception ex){
JOptionPane.showMessageDialog(this, ex.getMessage());
}
}
Esse pequeno detalhe que esqueci de acrescentar, permite que voce utilize a caixa JDialog com a máscara vazia (""), assim:
String resp = inputBox(this, "Digite um nome", "Pesquisando nome", "");
Um abraço