JdesktopPane e JinternalFrame

4 respostas
JeanJavaMan

Olá pessoal, sou novo aqui no fórum e no mundo JAVA, bom antes de falar o meu problema vou dizer o que eu fiz.
1º Criei um Jframe usando a IDE NetBeans.
2º Coloquei um jMenuBar nesse Jframe.
3º Coloquei JdesktopPane. Agora vai o problema, para abrir um Jinternalframe faço o seguinte código:

MeuJinternalFrame jit = new MeuJinternalFrame();
jdesktopPane.add(jit);
jit.setvisible(true);

Blz até ai tudo bem, mas quando eu abro um segundo JinternalFrame eu verifico se o outro JinternalFrame anterior está aberto usando o seguinte codigo no segundo JinternalFrame:

PrimeiroJinternalFrame jit = new PrimeiroJinternalFrame();
jit.isVisible();

Ai está o problema, mesmo o JinternalFrame estando aberto no JdesktopPane, ele continua me retornando false! Tenho o mesmo problema quando preciso executar um método de um JinternalFrame em outro JinternalFrame. agora vou passar o código mostrando minha lógica:

public class SegundoJinternalFrame extends javax.swing.JInternalFrame{
      private void atualizartabela(){
         PrimeiroJinternalFrame jit = new PrimeiroJinternalFrame();
             if(jit.isVisible){
              jit.atualizaTabela();
               }
}

};

desculpem por favor se não soube me expressar corretamente, mas podem me ajudar com esse problema?

4 Respostas

carloshsamaral

Cara eu também sou novo mas pelo oq eu entendo você ta insntaciando um objeto novo de PrimeiroJinternalFrame() mas no construtor dele você pediu pra iniciar o visible(true) ?

ViniGodoy

Toda vez que você usa a palavra “new” você cria uma nova janela. Se a classe da janela for a mesma, você ainda terá uma outra janela, só que igual a primeira.

Por isso, a janela que você abriu está realmente visível. Mas a nova janela, que você criou e testou, ainda não está.

Para resolver o problema, só passando o primeiro JInternalFrame como parâmetro para o segundo.
Ou fazendo com que seus internalframes sejam Singletons.

JeanJavaMan

carloshsamaral:
Cara eu também sou novo mas pelo oq eu entendo você ta insntaciando um objeto novo de PrimeiroJinternalFrame() mas no construtor dele você pediu pra iniciar o visible(true) ?


Não, era só para passar a ideia, eu instanciei Um objeto JinternalFrame e verifiquei se esse Objeto era visível com o método isVisible, esse código era só para passar a lógica do q eu estava tentando fazer na Classe do segundo JinternalFrame.

JeanJavaMan

ViniGodoy:
Toda vez que você usa a palavra “new” você cria uma nova janela. Se a classe da janela for a mesma, você ainda terá uma outra janela, só que igual a primeira.

Por isso, a janela que você abriu está realmente visível. Mas a nova janela, que você criou e testou, ainda não está.

Para resolver o problema, só passando o primeiro JInternalFrame como parâmetro para o segundo.
Ou fazendo com que seus internalframes sejam Singletons.


Muito Obrigado ViniGodoy, este era meu erro mesmo, peguei a lógica logo vou implementar no meu código

Criado 5 de outubro de 2015
Ultima resposta 6 de out. de 2015
Respostas 4
Participantes 3