Chamar jinternalframe a parti de outro

1 resposta
R

Gente vcs podem me ajudar com esse problema que não estou conseguindo resolver de maneira alguma vejam, eu tenho um programa que tem como janela principal um JFrame e dentro dele tem um JInternalFrame com o nome login que tem os jtextfields e um botao pra logar no sistema que quando clicado se o login for realido com sucesso e para fechar esse jinternalframe de login e abrir um outro jinternalframe chamado explorer que possui um jtree com opçoes para o usuario clicar e abrir outras janelas dentro sempre do mesmo JFrame.

Porem esta dando um erro sempre que clico no botão login do Jinternalframe de login e com isso n abrir o outro jinternalframe que e necessario para que o programa continue em andamento vou mostra abaixo um pouco dos trechos para ver se algum consegui me ajudar.

/////////////////////////////////
//Aqui o evento do botão de login do JInternalFrame que e a tela de login do sistema ele deveria //chamar o metodo exibirExplorer da Classe MenuPrincipal que e o JFrame onde o programa inteiro //se desenrola.

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

new MenuPrincipal(this).exibirExplorer();

}
////////////////////////////////

/////////////////////////////////////////

Aqui a classe MenuPrincipal onde esta o metodo chamado pela jButton1 que esta na classe Login que e outro jInternalFrame

public void exibirExplorer(){

Explorer ex = new Explorer();

jDesktopPane1.add(ex);

ex.setVisible(true);

/////////////////////////////////////////

}

Ou seja esse trecho de codigo seria responsavel por abri outro JinternalFrame dentro da janela principal do programa que e a classe MenuPrincipal que e um JFrame onde todos os JintenalFrames do programa vai sendo add.

uma OBs: esse mesmo jinternalframe que n se abri quando e clicado no botão para logar de outro jinternalframe ele abri quando quando e clicado no botão que esta na clasee MenuPrincipal ou seja ele so n abri quando e clicado a partir de outro jinternalframe.

Os erros que aparecem são esses abaixo vejam:

Exception in thread AWT-EventQueue-0 java.lang.UnsupportedOperationException: Not yet implemented

at locadora.MenuPrincipal.(MenuPrincipal.java:50)

at locadora.Login.jButton1ActionPerformed(Login.java:141)

at locadora.Login.access$000(Login.java:22)

at locadora.Login$1.actionPerformed(Login.java:74)

at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)

at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)

at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)

at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)

at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)

at java.awt.Component.processMouseEvent(Component.java:6263)

at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)

at java.awt.Component.processEvent(Component.java:6028)

at java.awt.Container.processEvent(Container.java:2041)

at java.awt.Component.dispatchEventImpl(Component.java:4630)

at java.awt.Container.dispatchEventImpl(Container.java:2099)

at java.awt.Component.dispatchEvent(Component.java:4460)

at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4574)

at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)

at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)

at java.awt.Container.dispatchEventImpl(Container.java:2085)

at java.awt.Window.dispatchEventImpl(Window.java:2475)

at java.awt.Component.dispatchEvent(Component.java:4460)

Ou seja o problema e que não consigo chamar um JinternalFrame a partir de outro, alguem pode me ajudar com alguma dica pois ja tentei de varios modos e não consigo sendo que se for pra chamar o mesmo jinternalframe so que em vez de ser de um jinternalframe sendo de um menu da classe onde ele vai ser add no desktoppane ai nao tenho problemas.

1 Resposta

B

Olá.

Cara, ano passado eu tive que fazer um projeto para a faculdade e fiquei com a mesma dúvida que você. Como abrir um InternalFrame dentro de outro. Apanhei muito com isso também. Porém contornei a situação de outra maneira.

Ao invés de abrir um JInternalFrame dentro de outro, eu abri um JDialog. Foi a maneira mais fácil que consegui para finalizar o projeto. O JDialog é ótimo para ser usado nessas situaçoes, pois você consegue pegaras informações dele e utilizar na tela anterior, sem acessar o banco de dados para atualizar as informações da tela anterior.

Caso você queira implementar dessa maneira, eu fiz um exemplinho bem simples para você.

package teste;

public class frmPrincipal extends javax.swing.JFrame {
    
    /** Creates new form frmPrincipal */
    public frmPrincipal() {
        initComponents();
        
        frmInternalFrame internalFrame = new frmInternalFrame();
        desktopPane.add(internalFrame);
        internalFrame.setVisible(true);
    }
        
    // <editor-fold defaultstate="collapsed" desc=" Código Gerado "> Cógido gerado automaticamente
    // </editor-fold>                        
        
    // Declaração de variáveis - não modifique                     
    private javax.swing.JDesktopPane desktopPane;
    // Fim da declaração de variáveis                   
    
}
A classe acima seria sua classe Principal, no caso ela é um JFrame.

A classe abaixo é um JInternalFrame. Eu adicionei esse JInternalFrame no DesktopPane (como você pode ver na classe acima).
Criei um botão para chamar o Dialog.

/*
 * frmInternalFrame.java
 *
 */

package teste;

import java.awt.Frame;

public class frmInternalFrame extends javax.swing.JInternalFrame {
        
    Frame parent;
    public frmInternalFrame() {
        initComponents();        
        
         parent = this.parent; 
    }
        
    // <editor-fold defaultstate="collapsed" desc=" Código Gerado ">                          
   // </editor-fold> 
 

   private void abrirTelaInterna(java.awt.event.ActionEvent evt) {                                  
         frmDialog dialog = new frmDialog(parent, true); 
         dialog.setVisible(true);  
    }                                 
    
    
    // Declaração de variáveis - não modifique                     
    private javax.swing.JButton jButton1;
    // Fim da declaração de variáveis                   
    
}

A classe abaixo é o JDialog que é chamado pelo JInternalFrame

/*
 * frmDialog.java
 *
 */

package teste;

public class frmDialog extends javax.swing.JDialog {
    
    /** Creates new form frmDialog */
    public frmDialog(java.awt.Frame parent, boolean modal) {
        super(parent, modal);
        initComponents();
    }

Dessa maneira você consegue abrir outra tela dentro de um JInternalFrame.

Criado 7 de fevereiro de 2010
Ultima resposta 8 de fev. de 2010
Respostas 1
Participantes 2