Fórum Ativar menu do form pincipal quando o mesmo estiver como setvisible(false) #517869

25/04/2015

0

Ola novamente,

Para que o usuário não abra duas vezes o mesmo form, eu desativei (menu.setVisible(false) ) o menu do form principal ao abrir algum formulario (que por sua vez é um jframeinternal). o problema é que nao sei como ativar reativar (menu.setVisible(true)) o menu no form principal, quando o usuário fecha o jframeinternal e retorna para o menu principal. Pensei em colocar no botão ao fechar do jframeinternal, mas nao sei como fazer isso. Alguem pode me ajuda ?
Silvio Silveira

Silvio Silveira

Responder

Posts

25/04/2015

Ronaldo Lanhellas

Bom, você tem que ter uma referência a este componente que você quer "reativar". O ideal é que você poste o trecho do seu código onde você pretende fazer isso para que eu possa lhe ajudar melhor.
Responder

Gostei + 0

25/04/2015

Silvio Silveira

Entao. Quando eu abro o jframeinternal, o componente menu do form principal fica invisivel. Aqui é como eu chamo o jforminternal:

private void jMenuItem3ActionPerformed(java.awt.event.ActionEvent evt) {

Cadastro_Maquina maq = new Cadastro_Maquina();
maq.setLocation(280, 50);
desk.add(maq);
maq.setVisible(true);
jm.setVisible(false); // jm é o nome que eu dei para o componente "menu"

}

e no botao sair do meu jfrominternal para retornar para o menu principal fiz assim:

private void jSairActionPerformed(java.awt.event.ActionEvent evt) {

dispose();
// e é aqui , na hora de sair e retornar para o menu principal, é que eu preciso que o meu i menu (jm) ficasse visivel de novo.

}
Responder

Gostei + 0

25/04/2015

Ronaldo Lanhellas

você poderia criar um método no seu form principal que ativasse e desativasse o componente JM, assim:

public void enableJmComponent(boolean enable){
   jm.setVisible(enable);
}


E dentro do seu jfrominternal faça assim:

meuFormPrincipal.enableJmComponent(true);
Responder

Gostei + 0

25/04/2015

Silvio Silveira

aqui deu certo, o menu fica invisivel:

private void jMenuItem3ActionPerformed(java.awt.event.ActionEvent evt) {


Cadastro_Maquina maq = new Cadastro_Maquina();
maq.setLocation(280, 50);
desk.add(maq);
maq.setVisible(true);
enableJmComponent(false); // chamei o metodo


}
public void enableJmComponent(boolean enable){ // crie o metodo como descreveu
jm.setVisible(enable);
}

mas no jframeinternal, ao retornar para o principal, nao está deixando o menu visivel. Eis o codigo do botao sair do jframeinternal:

private void jSairActionPerformed(java.awt.event.ActionEvent evt) {
dispose();
Principall pr = new Principall();
pr.enableJmComponent(true); // tive que fazer assim, pois se informasse 'Principall' ele nao puxava o 'enableJmComponent(true)'.

}
Responder

Gostei + 0

25/04/2015

Ronaldo Lanhellas

Você não pode criar uma nova instância de Principal() que é diferente da que está em memória, deve usar a mesma instância.

Tenta assim:

Principal.this.enableJmComponent();
Responder

Gostei + 0

25/04/2015

Silvio Silveira

esse codigo fica no botao sair do jframeinternal?
Responder

Gostei + 0

25/04/2015

Ronaldo Lanhellas

Sim,

private void jSairActionPerformed(java.awt.event.ActionEvent evt) { 
dispose();
//Principall pr = new Principall();
Principal.this.enableJmComponent(true);

}
Responder

Gostei + 0

25/04/2015

Silvio Silveira

Com o seu código, ele pede pra fazer importação, mas nenhuma importação deu certo. Alterando de 'Principal' para 'Principall' (que é o nome do meu form principal, da erro: "not an enclosing class: Principall". com um ícone de exclamação vermelho do lado.
Responder

Gostei + 0

25/04/2015

Ronaldo Lanhellas

Certo, foi apenas erro de digitação, use o Principall mesmo. Mas como está apresentando erro ainda você vai ter que referenciar a instância do objeto de outra forma.

Na hora de criar um seu Principall, ( imagino que na iniciação do seu sistema ), guarde a referência do objeto em um atributo estático. Veja:

public class Principall{
  private static Principall instance;

  public static Principall getInstance(){
       return instance;
  }
}


lembrando que a variável "instance" deve conter o objeto Principall que foi criado da primeira vez. O modelo acima é um padrão de projeto chamado Singleton.

Então no seu interno, vocÊ fará:

Principall.getInstance().enableCompoment(true);
Responder

Gostei + 0

25/04/2015

Silvio Silveira

Valeu colega, deu certo aqui , obrigado!!
Responder

Gostei + 0

25/04/2015

Ronaldo Lanhellas

Disponha. Boa sorte.
Responder

Gostei + 0

25/04/2015

Ronaldo Lanhellas

Disponha. Boa sorte.
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar