Aqui eu tenho algo desse tipo:
private boolean animalValido(){
txtNomeAnimal.setText(txtNomeAnimal.getText().trim());
switch(opcaoAnimal){
case 1:
if(cbxCastaAnimal.getSelectedIndex() == OPCAO_INVALIDA){
cbxCastaAnimal.requestFocusInWindow();
cbxCastaAnimal.setBackground(new Color(255, 255, 50));
lblStatus.setForeground(Color.red);
lblStatus.setText("Preenchimento obrigatório: CASTA");
animalValido = false;
}else{
passagemAnimal++;
opcaoAnimal = 2;
recomporCamposAnimal();
animalValido();
}
break;
case 2:
if(cbxRacaAnimal.getSelectedIndex() == OPCAO_INVALIDA){
cbxRacaAnimal.requestFocusInWindow();
cbxRacaAnimal.setBackground(new Color(255, 255, 50));
lblStatus.setForeground(Color.red);
lblStatus.setText("Preenchimento obrigatório: RAÇA");
animalValido = false;
}else{
passagemAnimal++;
opcaoAnimal = 3;
recomporCamposAnimal();
animalValido();
}
break;
case 3:
if(txtNomeAnimal.getText().isEmpty()
|| txtNomeAnimal.getText().length() > 15){
txtNomeAnimal.requestFocusInWindow();
txtNomeAnimal.setBackground(new Color(255, 255, 204));
lblStatus.setForeground(Color.red);
lblStatus.setText("Preenchimento obrigatório: NOME");
telefoneValido = false;
}else{
passagemAnimal++;
recomporCamposAnimal();
if(passagemAnimal >= 3){
animalValido = true;
verificarInclusaoAnimal();
}
}
break;
}
return animalValido;
}
Daí, no botão de salvar, antes de qualquer coisa eu testo passando esse método:
private void btnSalvarActionPerformed(java.awt.event.ActionEvent evt) {
if(animalValido()){
try{
salvar(retornarAnimal());
}catch(SQLException sqle){
System.out.println(sqle.getMessage());
}
}
}
No botão Novo:
private void btnNovoActionPerformed(java.awt.event.ActionEvent evt) {
opcao = INICIO;
opcaoTelefone = INICIO;
opcaoAnimal = INICIO;
salvar = true;
habilitarCadastramento();
if(clientes.isEmpty()){
txtCodigo.setText(String.valueOf(idCliente));
}else{
int id = idCliente;
txtCodigo.setText(String.valueOf(++id));
}
painelAbas.setSelectedIndex(ABA_ENDERECO);
txtNomeCliente.requestFocusInWindow();
btnNovo.setEnabled(false);
redefinirBotaoSalvar(true);
limparCampos();
}
Onde INICIO: private final int INICIO = 1;
Daí sempre quando clico para cadastrar um novo animal, ele indica a opção 1 para o switch.
Toda vez que há um campo não preenchido, ele chama (recursão) o método animalValido(). Enquanto esse campo não é preenchido, ele marca o campo de amarelo, o label lblStatur para cor vermelha e indica “Preenchimento obrigatório: CAMPO X”.
Eu resolvi o meu problema assim. Se alguém tiver uma maneira mais enxuta/elegante de fazer, estou aberto a sugestões. No meu caso, a minha tela é formada por diversas abas (Endereço, Telefones e Animais), e para cada campo de cada aba há uma validação desse tipo, por isso o uso do switch() [somente uma fração do código foi postada].