Criar um novo JPanel dentro de um JFrame

Eu tenho um JFrame ‘JanelaPrincipal’ e uma class ‘GerarTransacaoPanel’ que extende JPanel. Quando um botão da JanelaPrincipal é clicado eu tenho que fazer o GerarTransacaoPanel aparecer na JanelaPrincipal, isto é, incluir o GerarTransacaoPanel na JanelaPrincipal.

Parace simples, dá um new GerarTransacaoPanel , um add no getContentPane() da JanelaPrincipal e é isso ai. Porém isso não funciona… eu tentei fazer de várias formas, vou postar aqui as mais relevantes (este código esta dentro da ação de um botão da class JanelaPrincipal):

GerarTransacaoPanel panel = new GerarTransacaoPanel(); getContentPane().add(panel); getContentPane().validate();

GerarTransacaoPanel panel = new GerarTransacaoPanel(); getContentPane().add(panel); getContentPane().repaint();

Eu acho que o problema é que você inclui um componente na JFrame quando esta executando… Muito obrigada!

Vc tentou só dar um repaint()?

Já uai. Tá ai em cima, inclui o componente e dei um repaint()

Sim, mas não getContentPane().repaint(), apenas repaint()!

Aliás, que gerenciador de Layout vc está usando?

Cara ao invés de fazer um add no content pane você já tentou fazer um set ?
Tipo:

meuFrame.setContentPane(meuPanel);

Após isso você deve avisar o Swing para atualizar a sua árvore de componentes:

SwingUtilities.updateComponentTreeUI(meuFrame) ;

Já tentei um this.repaint(). Não posso dar um set porque tem outros componetes lá e este trem de atualizar o Swing eu vou tentar.

Tentei., Vou colocar o código todo, não assustem, a parte que realmente importa é o método jButton1ActionPerformed() na class Frame (segundo código).

[code]package plataformas;

/**
*

  • @author ariane
    */
    public class MyPanel extends javax.swing.JPanel {

    /** Creates new form MyPanel */
    public MyPanel() {
    initComponents();
    }

    /** This method is called from within the constructor to

    • initialize the form.

    • WARNING: Do NOT modify this code. The content of this method is

    • always regenerated by the Form Editor.
      */
      //
      private void initComponents() {
      jLabel1 = new javax.swing.JLabel();

      setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)));
      jLabel1.setText(“Teste”);

      javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
      this.setLayout(layout);
      layout.setHorizontalGroup(
      layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
      .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
      .addContainerGap(27, Short.MAX_VALUE)
      .addComponent(jLabel1)
      .addGap(29, 29, 29))
      );
      layout.setVerticalGroup(
      layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
      .addComponent(jLabel1, javax.swing.GroupLayout.DEFAULT_SIZE, 76, Short.MAX_VALUE)
      );
      }//

    // Declaração de variáveis - não modifique
    private javax.swing.JLabel jLabel1;
    // Fim da declaração de variáveis

}[/code]

[code]package plataformas;

import javax.swing.SwingUtilities;

/**
*

  • @author ariane
    */
    public class Frame extends javax.swing.JFrame {

    /** Creates new form Frame */
    public Frame() {
    initComponents();
    }

    //
    private void initComponents() {
    jButton1 = new javax.swing.JButton();

     setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
     jButton1.setText("Create MyJPanel");
     jButton1.addActionListener(new java.awt.event.ActionListener() {
         public void actionPerformed(java.awt.event.ActionEvent evt) {
             jButton1ActionPerformed(evt);
         }
     });
    
     javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
     getContentPane().setLayout(layout);
     layout.setHorizontalGroup(
         layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
         .addGroup(layout.createSequentialGroup()
             .addContainerGap()
             .addComponent(jButton1)
             .addContainerGap(254, Short.MAX_VALUE))
     );
     layout.setVerticalGroup(
         layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
         .addGroup(layout.createSequentialGroup()
             .addContainerGap()
             .addComponent(jButton1)
             .addContainerGap(263, Short.MAX_VALUE))
     );
     pack();
    

    }//

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
    MyPanel mypanel = new MyPanel();
    getContentPane().add(mypanel);
    //getContentPane().validate();
    //getContentPane().repaint();
    //this.repaint();
    this.validate();
    //SwingUtilities.updateComponentTreeUI(this);
    }

    /**

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

    // Declaração de variáveis - não modifique
    private javax.swing.JButton jButton1;
    // Fim da declaração de variáveis

}[/code]

bom… eu resolvi… era só colocar um setBounds() no panel. Obrigada!