Eu quero que ao clicar no botão apareça uma nova tela para entrar com os dados do cadastro.
Pesquisando eu cheguei nesse link:
A sugestão é que eu use o seguinte código no botão:
NomeDaClasseDoSeuForm nomeVariavel = new NomeDaClasseDoSeuForm();
nomeVariavel.setVisible(true);
dispose();
Dessa forma ao pressionar o botão a tela de cadastro aparece e a tela de menu desaparece. O problema é que ao concluir o cadastro a tela de menu não volta.
A minha intenção é que durante o cadastro a tela de menu fique invisível ou que não seja possível interagir com os elementos até que o cadastro seja concluído ou cancelado.
Eu tentei colocar esse mesmo código na conclusão ou cancelamento do cadastro para chamar a tela de menu novamente mas recebo o seguinte erro.
Exception in thread “AWT-EventQueue-0” java.lang.StackOverflowError
Evite usar o dispose, o dispose serve para avisar o Java que vc não vai mais utilizar o componente, ou seja, se usar o dispose terá que usar o new caso queira abrir a tela novamente, mas se usar os setVisible terá que limpar o form toda vez que a tela for exibida, pois guardará os valores preenchidos anteriormente.
class TelaMenu {
final TelaCadastro telaCadastro;
public TelaMenu() {
telaCadastro = new TelaCadastro();
}
void cadastro() {
telaCadastro.atribuirTelaAnterior(this);
setVisible(false);
telaCadastro.limparForm();
telaCadastro.setVisible(true);
}
}
class TelaCadastro {
Component anterior;
void atribuirTelaAnterior(Component anterior) {
this.anteior = anterior;
}
void concluir() {
// validar
setVisible(false);
if (anterior != null) {
anterior.setVisible(true);
}
}
public void limparForm() {
nomeTextField.setText("");
idadeTextField.setText("");
}
// caso queira atualizar ou exibir os dados do cliente
public void preencherForm(Cliente cliente) {
this.cliente = cliente;
nomeTextField.setText(cliente.obterNome());
idadeTextField.setText(cliente.obterIdade());
}
}
Geralmente eu extendo JDialog ao invés de JFrame em subtelas pois forço o usuário a não clicar na tela que fica por traz … Mas no seu caso eu usuária o setVisible mesmo que ao fechar a subtela exibiria o Menu novamente.