JInternalFrame - NetBeans

4 respostas
tandrade

Companheiros,

Estou com um pequeno problema. É o seguinte, estou desenvolvendo aqui um JMenu, para abrir uma JInternalFrame num JDesktopPane, blza!
Ocorre que quando clico no JMenuItem (opção de cadastrar) ele abre corretamente o JInternalFrame (mudando o visible de false para true). No entanto, quando fecho essa janela e tento abrir novamente clicando nessa mesma opção “Cadastrar” o programa simplesmente não abre a JInternalFrame pela segunda vez.

private void CadastroMousePressed(java.awt.event.MouseEvent evt) {                                      
        frame.setSize(510,220);
        frame.setLocation(10, 10);
        frame.setVisible(true);
    }

Alguém sabe como fazer com que essa janela abra toda vez q eu clicar no item do menu? (e não somente uma vez)

[]'s

4 Respostas

Pablo_Eteg

Vc tem duas opções:

Primeira:
Sobrescrever o método close do JInternalForm para
que a janela não feche e apenas execute o setVisible(false)

Segunda:
Quando vc fecha o JInternalForm ele é coletado pela garbage
Collection, já que o JInternalForm é um objeto e vc pode visualizá-lo
novamente através de uma nova instância do seu JInternalForm.
new JInternalForm.

Eu aconselho a segunda opção, pois quando o JInternalform não
estiver sendo utilizado ele não estará alocado em memória economizando
recursos.

Zeed01

Boa tarde colegas !

tandrade:
Onde você esta criando esse objeto frame ?
E como você fazendo quando pede para fechá-lo ?

Um abraço.

L

então tandrade, eu estava com o mesmo problema…
Vou colocar como resolvi o meu problema:

private void mnConsultasEntregadoresActionPerformed(ActionEvent evt) {
		int i = desktop.getIndexOf(mdiConsultaEntregadores);
		if(i == -1){
		    mdiConsultaEntregadores = ConsultaEntegadoresInternalFrame.instance();
		    desktop.add(mdiConsultaEntregadores, JLayeredPane.DEFAULT_LAYER); 
		    mdiConsultaEntregadores.setVisible(true);
		}
	}

Ou seja, dessa forma eu deixo abrir apenas uma tela de consulta, por isso verifico se o getIndexOf é -1.

Lembro que no meu caso não estava abrindo pela segunda vez pq eu precisava adicionar o meu jinternalframe novamente no meu jdesktoppanel. Acho que no seu caso deve ser isso tb…Quando vc abre a primeira vez, ele já já adicionado no seu jdesktoppanel, quando vc fecha essa tela, vc tá retirando-a na verdade do seu jdesktoppanel…Vcentão precisa incluí-la novamente.
Se vc olhar meu código, eu só deixo pra incluir a janela no desktop quando o cara clicar…

Bem, isso deve solucionar o seu problema.

jefftronic

Muda o evento mousePressed para actionPerformed

Criado 21 de dezembro de 2007
Ultima resposta 24 de out. de 2011
Respostas 4
Participantes 5