Achei um jeito até bem mais fácil, veja:
[code]package exemplo;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.regex.Pattern;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.text.JTextComponent;
public class Janela extends JFrame {
private JTextField campoNumerico;
private JTextField campoNotNull;
private JButton botaoOk;
public Janela(){
JPanel painel = new JPanel();
campoNumerico = new JTextField();
campoNumerico.setPreferredSize(new Dimension(100, 20));
painel.add(campoNumerico);
painel.add(new JLabel("Campo Numérico"));
this.add(painel, BorderLayout.NORTH);
painel = new JPanel();
campoNotNull = new JTextField();
campoNotNull.setPreferredSize(new Dimension(100, 20));
painel.add(campoNotNull);
painel.add(new JLabel("Campo Not Null"));
this.add(painel, BorderLayout.CENTER);
botaoOk = new JButton("OK");
botaoOk.addMouseListener(new MouseAdapter(){
public void mouseClicked(MouseEvent e) {
validaCampos();
}
});
this.add(botaoOk, BorderLayout.SOUTH);
this.pack();
this.setResizable(false);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}
private void validaCampos() {
boolean todosValidos = true;
// Chamar para cada campo...
todosValidos = todosValidos && validaCampo(
campoNumerico,
"^[1-9]+[0-9]*$",
"Digite um valor numérico válido no campo numérico"
);
todosValidos = todosValidos && validaCampo(
campoNotNull,
"^.+$",
"Não deixe o campo not null vazio"
);
if(todosValidos){
JOptionPane.showMessageDialog( // Caixa de mensagem
this, // Janela da aplicação (opcional, pode ser null)
"Campos ok!", // Mensagem
"Sucesso", // Título da caixa de mensagem
JOptionPane.INFORMATION_MESSAGE // Ícone da caixa de mensagem
);
} else {
JOptionPane.showMessageDialog( // Caixa de mensagem
this, // Janela da aplicação (opcional, pode ser null)
"Há campos inválidos", // Mensagem
"Erro de validação", // Título da caixa de mensagem
JOptionPane.ERROR_MESSAGE // Ícone da caixa de mensagem
);
}
}
/**
* Valida um campo de texto qualquer (JTextField, JTextArea, etc...)
* Utiliza a expressão regular fornecida
* Em caso de erro exibe a mensagem fornecida
* @param campo
* @param expressao
* @param mensagem
* @return validade do valor do campo
*/
private boolean validaCampo(JTextComponent campo, String expressao, String mensagem){
String valor = campo!=null?campo.getText().trim():null;
// Verificando se o valor se encaixa com a expressão
if(!Pattern.compile(expressao).matcher(valor).matches()){
JOptionPane.showMessageDialog( // Caixa de mensagem
this, // Janela da aplicação (opcional, pode ser null)
mensagem, // Mensagem
"Erro de validação", // Título da caixa de mensagem
JOptionPane.ERROR_MESSAGE // Ícone da caixa de mensagem
);
return false;
}
return true;
}
public static void main(String[] args) {
new Janela();
}
}[/code]
Pronto, modifiquei o código e pode ser executado pra ver o resultado…
A janela não é a coisa mais linda do mundo (hehuehuehue), mas funciona…