oii. boa noite.
Sou nova aqui no forum, se eu fizer algo de errado me desculpem.
mais, minha dúvida é a seguinte, eu preciso fazer uma tela de pesquisa, sei que o assunto é bastante batido, mais pesquisei nao consegui resolver o meu problema definitivo.
Eu fiz assim, criei no meu form de cadastro, dois construtores, e quando eu fecho o form de pesquisa eu chamo o form de cadastro novamente. o que acontece é que o primeiro objeto(o form de cadastro antes de pesquisar) fica aberto, nem com o dispose ele fecha, e se eu não instancio o novo objeto(na hora de exibir os dados escolhidos no form de pesquisa), eu nao consigo fazer com que os dados aparecam na tela de cadastro, a unica forma esta sendo mesmo instanciar um novo objeto. Entao minha dúvida é a seguinte, como fecho meu primeiro objeto ou como que eu passo os dados para o meu primeiro objeto?
Grata pela ajuda!
Vc ta usando que tecnologia? Se puder manda o código fonte para a galera dar uma olhada.
Se a criação do segundo formulário é feita no momento em que pede o fechamento do primeiro form pode ser que conforme a framework, o pai (chamador do constutor e mostar) espere o termino do filho, nesse caso a solução é repassar a reponsabilidade para um pai tanto do primeiro quanto do segundo.
oi… e como eu poderia fazer isso DavidUser?
Obrigada!
siga este passo a passo que criei para usar o padrão singleton:
Passo 1: Cria-se a primeira tela
Passo 2: Cria-se a segunda tela
Vamos dizer que eu tenha um botão na tela 1 e quero abrir a tela 2, quando eu clico nesse botão.
De 2 cliques no botão e coloque o código em vermelho dentro do evento:
private void btnAbrirSubTelaActionPerformed(java.awt.event.ActionEvent evt) {
JFrame NomeDaSuaSubTela = NomeDaSuaSubTela.getInstance();
NomeDaSuaSubTela.setVisible(true);
}
OBS: Altere de acordo com o nome da sua subtela.
OBS2: o código ainda não funciona…
Passo 3:
Abra o arquivo da sua subTela e vá na aba código, Localize o código abaixo:
public class NomeDaSuaSubTela extends javax.swing.JFrame (esta logo no começo)
coloque o código abaixo logo depois…
private static NomeDaSuaSubTela instancia;
Passo 4:
Localize o construtor que deve estar assim:
public NomeDaSuaSubTela () {
initComponents();
}
E troque por:
private NomeDaSuaSubTela () { // não esqueça que é agora é private
initComponents();
setDefaultCloseOperation(DISPOSE_ON_CLOSE);
}
La em baixo No final do código antes da ultima ? } ? do arquivo da subtela coloque o seguinte código
public static NomeDaSuaSubTela getInstance(){
if(instancia == null){
instancia = new subTela();
}
return instancia;
}
Caso a subTela tenha um botão Exit, use o seguinte código:
this.dispose();
OBS: troque todos os NomeDaSuaSubTela pelo nome Real da sua Tela.
Dessa forma, só é possível abrir 1 subJanela de cada vez no evento do botão, usar setvisible(false) ao invés de Dispose() não é legal, por que a janela ainda vai continuar na memória com os dados que estavam nela. Dispose() exclui a janela da memória.
para passar dados da Tela principal para a SubTela é só criar uma sobrecarga para o método getInstance:
public static NomeDaSuaSubTela getInstance(int i, Cliente cliente, Etc etc){
if(instancia == null){
instancia = new subTela();
}
return instancia;
}