Sim, mas eu trataria o form diferente.
Exemplos:
class LoginForm extends JFrame {
void setLogin(String);
String getLogin();
void setSenha(String);
void getSenha(String);
}
ou
class LoginForm extends JFrame {
void setUsuario(Usuario) {
loginTextField.setText(usuario.getLogin);
}
Usuario getUsuario() {
Usuario usuario;
usuario.setLogin(loginTextField.getText);
usuario.setSenha(senhaTextField.getText);
return usuario;
}
}
Isso facilita algumas coisas, inclusive a validação:
interface Validador {
void validar() throws ValidadorException;
}
para o exemplo 1:
class UsuarioValidador implements Validador {
void setLogin();
void setSenha();
void validar() {}
}
class LoginForm extends JFrame {
private static final UsuarioValidador usuarioValidador = new UsuarioValidador();
void entrar() {
// Observe que aqui facilita a obtenção dos valores a serem validados
String login = getLogin();
String senha = getSenha();
try {
usuarioValidador.setLogin(login);
usuarioValidador.setSenha(senha);
usuarioValidador.validar();
// OK
new TelaEntrar().setVisible(true);
catch(ValidadorException e) {
JOptionPane.show("Erro");
setSenha("");
}
}
}
para o exemplo 2:
class UsuarioValidador implements Validador {
void setUsuario();
void validar() {}
}
class LoginForm extends JFrame {
private static final UsuarioValidador usuarioValidador = new UsuarioValidador();
void entrar() {
// Observe que aqui facilita a obtenção dos valores a serem validados
Usuario usuario = getUsuario();
try {
usuarioValidador.setUsuario(usuario);
usuarioValidador.validar();
// OK
new TelaEntrar().setVisible(true);
catch(ValidadorException e) {
JOptionPane.show("Erro");
setSenha("");
}
}
}
Então no seu caso poderia ser feito assim:
String status = getStatus();
String nome = getNome();
String dataNasc = getDataNasc();
try {
statusValidador.setStatus(status);
statusValidador.validar();
} catch(ValidadorException e){
JOptionPane.showMessageDialog(null, "Favor informar o STATUS do familiar.\n Caso o STATUS seja INATIVO,\n deverá informar data inicial e data final");
return;
}
try {
nomeValidador.setNome(nome);
nomeValidador.validar();
} catch(ValidadorException e){
JOptionPane.showMessageDialog(null, "favor informar o NOME!", "Informação", JOptionPane.INFORMATION_MESSAGE);
jTextFieldNome.requestFocus();
return;
}
try {
dataValidador.setData(dataNasc);
dataValidador.validar();
} catch(ValidadorException e){
JOptionPane.showMessageDialog(null, "favor informar a DATA DE NASCIMENTO!","Informação",JOptionPane.INFORMATION_MESSAGE);
jFormattedTextFieldDataNascimento.requestFocus();
return;
}
Vc ainda pode usar métodos privados para cada item validado.
Outra forma de validador sem exception e sem setters seria:
interface Validador<E> {
// Retorna o resultado da validacao
int validar(E objetoASerValidado);
}
exemplo
class ClienteValidador implements Validador<Cliente> {
private static final NomeValidador nomeValidador = new ...;
private static final NascValidador nascValidador = new ...;
private static final CPFValidador cpfValidador = new ...;
int validar(Cliente c) {
if (nomeValidador.validar(c.nome) < 0 ) { // erro no nome
return -1;
}
if (nascValidador.validar(c.nasc) < 0 ) { // erro na data nascimento
return -2;
}
if (cpfValidador.validar(c.cpf) < 0 ) { // erro no cpf
return -3;
}
return 1; // ok
}
}