Problema com janelas

6 respostas
S

Boa tarde a todos

Estou com uma dúvida, talvez seja muito boba. Criei um frame principal com menus. Ao clicar num JmenuItem, por exemplo cadastro,Fornedecores, abre uma tela de cadastro. Eu instancio essas janelas pelo frame principal. E no final de cada eu coloco .setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE). O problema é que quando eu fecho a janela de cadastro, acaba fechando a janela principal também, ou seja, eu tenho que abrir o frame principal de novo.
Gostaria de saber como eu faço para que quando eu fechar alguma janela que eu chamei pelo evento do menu, feche somente ela, e não a aplicação inteira.

Eu tenho que colocar o nome da classe ao invés do JFrame, assim:

setDefaultCloseOperation([nomedaclasse].EXIT_ON_CLOSE)?

Como devo proceder? Sei que se eu não colocar essa linha, o programa não será fechado.
Desde já agradeço.

6 Respostas

R

boa tarde vamos la.
no seu formulario principal onde tem os menus deixa como esta, pois ele que é a raiz da aplicação e se fechar ele o programa esta encerrado…

quando vc coloca JFrame.EXIT_ON_CLOSE se refere a uma constante da classe JFrame e esta correto utilizar assim mesmo.

agora nas demais classes tipo Fornecedores muda pra DISPOSE_ON_CLOSE no local de EXIT_ON_CLOSE.

S

Acho que eu não expliquei direito:

Na janela principal da aplicação quando eu faço isso:

MenuItem_Fornecedores.addActionListener(new java.awt.event.ActionListener(){

public void actionPerformed(new java.awt.event.ActionEvent e){

Fornecedores f = new Fornecedores();

f.setVisible(true);

f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

Quando eu fecho a janela de cadastro de fornecedores, ela fecha também a aplicação principal.
eu tirei o método main da classe Fornecedores e estou colocando na classe principal, para chamar quando eu clicar no menu.
Minha questão é, se eu colocar o DISPOSE, eu só vou fechar a janela Fornecedores, ou eu vou fechar ela junto com a classe principal? (Eu não quero que a classe principal seja fechada, pq convém que eu faça outros tipos de operação).
Obrigado.

R

compreendi sim, e se colocar o DISPOSE fechara apenas a tela de fornecedores sim, agora uma sugestão o método setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); pode ser colocado dentro da propria classe fornecedores.

S

Mas qual seria a lógica disso?

Vejo conveniente fazer isso se eu for executar essa classe separadamente. Mas se eu posso chamar ela de dentro de uma outra classe, não vejo necessidade de colocar esse método dentro de cada classe.

Isso eu não entendi.

R

seria uma forma de encapsulamento ou simples padronização, já que no seu Frame vc define tamanho componentes e porque não modo de se fechar.

S

Entendi, não tem nada a ver com desempenho então?

Valeu pela dica cara.

Criado 13 de janeiro de 2012
Ultima resposta 13 de jan. de 2012
Respostas 6
Participantes 2