Ativar menu do form pincipal quando o mesmo estiver como setvisible(false)
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 ?
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
Curtidas 0
Respostas
Ronaldo Lanhellas
25/04/2015
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.
GOSTEI 0
Silvio Silveira
25/04/2015
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.
}
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.
}
GOSTEI 0
Ronaldo Lanhellas
25/04/2015
você poderia criar um método no seu form principal que ativasse e desativasse o componente JM, assim:
E dentro do seu jfrominternal faça assim:
public void enableJmComponent(boolean enable){
jm.setVisible(enable);
}
E dentro do seu jfrominternal faça assim:
meuFormPrincipal.enableJmComponent(true);
GOSTEI 0
Silvio Silveira
25/04/2015
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)'.
}
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)'.
}
GOSTEI 0
Ronaldo Lanhellas
25/04/2015
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:
Tenta assim:
Principal.this.enableJmComponent();
GOSTEI 0
Silvio Silveira
25/04/2015
esse codigo fica no botao sair do jframeinternal?
GOSTEI 0
Ronaldo Lanhellas
25/04/2015
Sim,
private void jSairActionPerformed(java.awt.event.ActionEvent evt) {
dispose();
//Principall pr = new Principall();
Principal.this.enableJmComponent(true);
}
GOSTEI 0
Silvio Silveira
25/04/2015
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.
GOSTEI 0
Ronaldo Lanhellas
25/04/2015
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:
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á:
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);
GOSTEI 0
Silvio Silveira
25/04/2015
Valeu colega, deu certo aqui , obrigado!!
GOSTEI 0
Ronaldo Lanhellas
25/04/2015
Disponha. Boa sorte.
GOSTEI 0
Ronaldo Lanhellas
25/04/2015
Disponha. Boa sorte.
GOSTEI 0