Criar um novo JPanel dentro de um JFrame

7 respostas
A

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!

7 Respostas

V

Vc tentou só dar um repaint()?

A

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

V

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

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

B

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) ;
A

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.

A

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).

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.
     */
    // <editor-fold defaultstate="collapsed" desc=" Código Gerado ">                          
    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)
        );
    }// </editor-fold>                        
    
    
    // Declaração de variáveis - não modifique                     
    private javax.swing.JLabel jLabel1;
    // Fim da declaração de variáveis                   
    
}
package plataformas;

import javax.swing.SwingUtilities;

/**
 *
 * @author  ariane
 */
public class Frame extends javax.swing.JFrame {
    
    /** Creates new form Frame */
    public Frame() {
        initComponents();
    }
    
    // <editor-fold defaultstate="collapsed" desc=" Código Gerado ">                          
    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();
    }// </editor-fold>                        
    
    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                   
    
}
A

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

Criado 20 de março de 2007
Ultima resposta 21 de mar. de 2007
Respostas 7
Participantes 3