Frame nao exibe o internal frame de jeito nenhum

9 respostas
N

bom, minha duvida é a do tópico. para exemplificar melhor o codigo segue abaixo:

package teste2;

public class JFrame extends javax.swing.JFrame
{

    public JFrame() {
        initComponents();


    }

    public void adicionatela(){

    }

// aqui esta o botao que eu aperto para abrir o jinternalframe


       private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                        
       JFrame jf = new JFrame();
    
       jf.add(jInternalFrame1);
      
       jInternalFrame1.setVisible(true);
      
     
    }                                       

    /**
    * @param args the command line arguments
    */
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                JFrame jf = new JFrame();
                jf.setVisible(true);
                //jf.add(jInternalFrame1);
               
            }
        });
    }

    // Variables declaration - do not modify                    
    private javax.swing.JButton jButton1;
    private javax.swing.JButton jButton2;
    private javax.swing.JButton jButton3;
    private javax.swing.JButton jButton4;
    private javax.swing.JInternalFrame jInternalFrame1;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JPanel jPanel1;
    // End of variables declaration                  

}

omiti algum codigos gerados automaticamente pelo netbeans para facilitar a visualizacao do codigo.

agradeço qualquer sugestão.

9 Respostas

doug

Olá
Dê uma olhadinha neste link
Como ele você vai conseguir fazer o que vc quer…

Espero ter ajudado
Flwsss

N

sim, eu ja pesquiser em varios sites, mas nao consigo detectar o erro. pois simplismente, a janela n abre.

doug

Olá,
Se vc reparar no seu código ele não tem um desktop pane… vc precisa adicionar neste JFrame seu um componente deste.
Depois repare nesta parte de seu código:

O Bom aqui vc vai instanciar um JInternalFrame... new JInternalFrame, e não um JFrame..., com a referencia do seu Desktoppane
    vc seta o internalframe no seu desktop... se vc compara seu código com o do exemplo pode visualizar melhor o que estou falando.

  Exemplificando o que falei:
public class Main extends JFrame implements ActionListener {

   private JDesktopPane pane;
   private JButton btn;

   public Main(){
        setLayout(new BorderLayout());
        setSize(800,600);
        setVisible(true);

        // Esse componente que permite vários "Frames"
        pane = new JDesktopPane();
        btn = new JButton("Parece Internal");
        btn.addActionListener(this);
       
        add(pane, Border.CENTER);
        add(btn, Border.SOUTH);
   }

   public void actionPerformed(Event e){
        // Componente que é a janela interna do desktop pane.
        JInternalFrame jif = new JInternalFrame();
        jif.setLocation(10,10);
        jif.setSize(50,50);
        jif.setVisible(true);

        // Aqui que setamos e exibimos o InternalFrame.
        pane.add(jif);
   }
}

Espero ter esclarecido a sua dúvida
Flwsss

N

entao é obrigatorio ter um desktopane para que o jframe abra um internalframe?

e por exemplo, o java ja havia criado

private void initComponents() {

jInternalFrame1 = new javax.swing.JInternalFrame();

entao terei que instanciar novamente?

doug

Sim, infelizmente é obrigado sim!!!

N

e por exemplo, o java ja havia criado

private void initComponents() {

jInternalFrame1 = new javax.swing.JInternalFrame();


entao terei que instanciar novamente?

tipo: JInternalFrame jif = JInternalFrame();

ao inves de add(jif), porque nao posso add(jInternalFrame) ??

doug

Não precisa instanciar novamente não!!
Basta fazer o que vc falou add(jInternalFrame1);, na hora do evento do botão.

N

ainda nao consegui.

tenho duas classes. JFrame.java e NewJInternalFrame.java.

no internal frame tem apenas um label para teste. porem veja como fiz o codigo na classe JFrame

package teste2;

import javax.swing.JDesktopPane;


public class JFrame extends javax.swing.JFrame
{
    JDesktopPane pane = new JDesktopPane();

    public JFrame() {
        initComponents();
        


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

       NewJInternalFrame i = new NewJInternalFrame();
       i.setVisible(true);
       pane.add(i);
       pane.setVisible(true);
       i.setVisible(true);
          
       
       
      
    }                                        

    /**
    * @param args the command line arguments
    */
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                JFrame jf = new JFrame();
                jf.setVisible(true);
                
                

                
            }
        });
    }

    // Variables declaration - do not modify                     
    private javax.swing.JButton jButton1;
    private javax.swing.JButton jButton2;
    private javax.swing.JButton jButton3;
    private javax.swing.JButton jButton4;
    private javax.swing.JInternalFrame jInternalFrame1;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JPanel jPanel1;
    // End of variables declaration                   

}

ainda nao exibe =(

zoren

Vamos por partes:

  1. Adicionar um JDesktopPane a sua janela
  2. Criar seu JInternalFrame
  3. Adicionar o JinternalFrame ao JDesktopPane
  4. Exibir o seu JInternalFrame
Criado 2 de maio de 2009
Ultima resposta 3 de mai. de 2009
Respostas 9
Participantes 3