Adicionar um Panel

11 respostas
malock
Dem uma olhada no codigo e me falem .... Qual o erro.. pois quando executo o "UsaPainelB" ele da erro. segue os fontes...
/**************      
/*
/* Criei para gerar um painel com os botoes.
/*
/**************
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.event.KeyEvent;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class NovoPainelB extends JFrame {
	private static final long serialVersionUID = 1;
	public JLabel lNome;
	public JLabel lEndere;
	
	public JButton bNovo;
	public JButton bSalvar;
	public JButton bCancelar;
	
	public JPanel pPanelC;
	
	public NovoPainelB() {
		super("NovoPainelB");
		setSize(340,80);	
		
		 pPanelC = new JPanel();
		 pPanelC.setLayout(null);
		
		 getContentPane().setLayout(new BorderLayout());
		 getContentPane().add(pPanelC, BorderLayout.CENTER);
		
		 pPanelC.setBackground( new Color(150,20,25));
				
		 bNovo = new JButton("Novo");
		 bNovo.setMnemonic(KeyEvent.VK_N);
		 bNovo.setBounds(10,20,90,25);
		 
		 bSalvar = new JButton("Salvar");
		 bSalvar.setMnemonic(KeyEvent.VK_S);
		 bSalvar.setBounds(110,20,90,25);
		 
		 bCancelar = new JButton("Cancelar");
		 bCancelar.setMnemonic(KeyEvent.VK_C);
		 bCancelar.setBounds(210,20,90,25);
		 
		pPanelC.add(bNovo);
		pPanelC.add(bSalvar);
		pPanelC.add(bCancelar);		
	}	
 public static void main(String []arg){
	NovoPainelB np = new NovoPainelB();
	np.setVisible(true);
   }
}
-----------------------------------------------
-----------------------------------------------
-----------------------------------------------
/************************
/*
/* Este ao ser criado deveria receber em sua BASE o painel criado 
/* na Casse a cima
/*
/************************

import java.awt.BorderLayout;
import java.awt.Color;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class UsaPainelB extends JFrame{

	private static final long serialVersionUID = 1;
	public JLabel lNome;
	public JLabel lEndere;

	public NovoPainelB ppInovo;
	public JPanel pPanelD;
	
	public UsaPainelB() {
		 super("Usa o painel B");
         setSize(380,80);
				
         ppInovo = new NovoPainelB();
         ppInovo.setLayout(null);
		
		 pPanelD = new JPanel();
		 pPanelD.setLayout(null);
				 
		 getContentPane().setLayout(new BorderLayout());
		 getContentPane().add(pPanelD, BorderLayout.CENTER);
		 getContentPane().add(ppInovo, BorderLayout.SOUTH);
		
		 pPanelD.setBackground( new Color(250,220,25));
	}
  public static void main(String []arg){
	UsaPainelB usan = new UsaPainelB();
	usan.setVisible(true);
  }	
}

Se alguem puder me ajudar eu agradeço…
e Muito obrigado desde ja.

11 Respostas

fmeyer

Quando vc for postar codigo, coloque-o entre as tags [ code]
e [ /code], assim ele ficará
endentado.\n’

fmeyer

NovoPainelB extends JFrame

nunca vai dar certo … tente extender Jpanel :mrgreen:

malock

Ok troquei mas mesmo assim ele não traz o NovoPainelB para dentro do UsaPainelB fica em branco não aparece o NovoPainelB que foi adicionado

tRuNkSnEt

No seu codigo tem algumas coisas que me parecem estar meio redundantes. Estou sem IDE aqui nesse pc para testar, se você puder mencionar o erro que dando seria mais facil.

Em todo caso, pelo seu codigo, voce esta tentando criar um frame com painel dentro de outro frame. Não sei se ele aceita isso não.
Veja:

ppInovo = new NovoPainelB();
-----> logo o seu ppInovo é um JFrame.

Tente mudar seu codigo usando a dica do amigo acima ou senão algo do tipo;

.add(ppInovo.pPainelC);

Para ficar mais pratico crie uma classe para cada painel e chame os painel no frame que tu está lidando.

  • public classe painelA extends JPanel
  • public classe painelB extends JPanel
  • public classe painelC extends JPanel
  • public classe painelD extends JPanel
  • public classe FramePrincipal extends JFrame;
    • .add panielA, painelB,PainelC,painelD

Falei grego??? UAhUAA eu preciso dormir fuiiiiiiiiiiiiiiiii

G

Você errou em algumas coisas, como usar “NovoPainelB extends JFrame” e tentar mudar o layout pra null…

Tente alterar seu código para que fique mais ou menos assim:

import java.awt.BorderLayout;
 import java.awt.Color;
 import java.awt.event.KeyEvent;
 import javax.swing.JButton;
 import javax.swing.JFrame;
 import javax.swing.JLabel;
 import javax.swing.JPanel;
 
// ESSA CLASSE DEVE "EXTENDER" JPANEL
 public class NovoPainelB extends JPanel {
 	private static final long serialVersionUID = 1;
 	public JLabel lNome;
 	public JLabel lEndere;
 	
 	public JButton bNovo;
 	public JButton bSalvar;
 	public JButton bCancelar;
 	
 	public JPanel pPanelC;
 	
 	public NovoPainelB() {
 		// AQUI NÃO EXISTE A CHAMADA DO CONSTRUTOR DA SUPERCLASSE
                //super("NovoPainelB");
 		setSize(340,80);	
 		
 		 pPanelC = new JPanel();
 		 pPanelC.setLayout(null);
 		
 		 // AQUI RETIREI O GETCONTENTPANE()
                 setLayout(new BorderLayout());
 		 add(pPanelC, BorderLayout.CENTER);
 		
 		 pPanelC.setBackground( new Color(150,20,25));
 				
 		 bNovo = new JButton("Novo");
 		 bNovo.setMnemonic(KeyEvent.VK_N);
 		 bNovo.setBounds(10,20,90,25);
 		 
 		 bSalvar = new JButton("Salvar");
 		 bSalvar.setMnemonic(KeyEvent.VK_S);
 		 bSalvar.setBounds(110,20,90,25);
 		 
 		 bCancelar = new JButton("Cancelar");
 		 bCancelar.setMnemonic(KeyEvent.VK_C);
 		 bCancelar.setBounds(210,20,90,25);
 		 
 		pPanelC.add(bNovo);
 		pPanelC.add(bSalvar);
 		pPanelC.add(bCancelar);		
 	}	
  public static void main(String []arg){
 	NovoPainelB np = new NovoPainelB();
 	np.setVisible(true);
    }
 }
import java.awt.BorderLayout;
 import java.awt.Color;
 import javax.swing.JFrame;
 import javax.swing.JLabel;
 import javax.swing.JPanel;
 
 public class UsaPainelB extends JFrame{
 
 	private static final long serialVersionUID = 1;
 	public JLabel lNome;
 	public JLabel lEndere;
 
 	public NovoPainelB ppInovo;
 	public JPanel pPanelD;
 	
 	public UsaPainelB() {
 	  super("Usa o painel B");
          // SE VC AUMENTAR O TAMANHO PODERÁ VER O pPanelD
          setSize(380,80);
 				
          ppInovo = new NovoPainelB();
          /* SE VOCÊ COLOCOU O LAYOUT DELE COMO BORDERLAYOUT E ADICIONOU O
           * JPANEL pPanelC, AQUI VOCÊ NÃO DEVE SETAR O LAYOUT PRA NULL
           */ 
          //ppInovo.setLayout(null);

         pPanelD = new JPanel();
         pPanelD.setLayout(null);

         getContentPane().setLayout(new BorderLayout());
         getContentPane().add(pPanelD, BorderLayout.CENTER);
         getContentPane().add(ppInovo, BorderLayout.SOUTH);
         
         /* COM O BORDERLAYOUT VOCÊ DEVE UTILIZAR ESTE MÉTODO PARA ELE AJUSTAR
          * O TAMANHO DO PAINEL
          */
 	 ppInovo.setPreferredSize(new java.awt.Dimension(380, 60));
         
         pPanelD.setBackground( new Color(250,220,25));
 	}
   public static void main(String []arg){
 	UsaPainelB usan = new UsaPainelB();
 	usan.setVisible(true);
   }	
 }

Assim ele vai funcionar, mas não sei se é bem o que você quer…

Até mais,

GH

malock

Ok deu certo "gui.hermeto " muito obrigado a todos … pela ajuda.

heliwow

Estou com um problema similar… ao inves de adicionar um Panel a um Frame so consigo utilizar um Frame dentro de Frame… o que poderia modificar nesse codigo?

public static void main(String[] args)

{

principalFrame p = new principalFrame();

p.setVisible(true);

p.setLocation(100,60);

p.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

FreeHand freeHand = new FreeHand();

DrawingListener listener = new DrawingListener(freeHand);

freeHand.addMouseListener(listener);

freeHand.addMouseMotionListener(listener);

JFrame f = new JFrame();

f.getContentPane().setLayout(new BorderLayout());

f.setBounds(new Rectangle(0,0,400,400));
f.getContentPane().add(freeHand.getColorPanel(), "North");
        f.getContentPane().add(freeHand);
        f.getContentPane().add(freeHand.getControlPanel(), "South");
        f.setLocation(500,100);
        f.setVisible(true);
    }
Marky.Vasconcelos

Poste seus códigos entre as tags e

Onde foi para o frame p?

public static void main(String[] args) 
{ 
principalFrame p = new principalFrame(); 
p.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
FreeHand freeHand = new FreeHand(); 
DrawingListener listener = new DrawingListener(freeHand); 
freeHand.addMouseListener(listener); 
freeHand.addMouseMotionListener(listener); 
p.getContentPane().setLayout(new BorderLayout()); 
p.setBounds(new Rectangle(0,0,400,400)); 

p.getContentPane().add(freeHand.getColorPanel(), "North"); 
p.getContentPane().add(freeHand); 
p.getContentPane().add(freeHand.getControlPanel(), "South"); 
p.setLocation(500,100); 
p.setVisible(true); 
}

Use o próprio p criado anteriormente e pra adicionar um JPanel usa algo como

JPanel jp = new JPanel(new BorderLayout);
frame.add(jp);
jp.add(freeHand);
heliwow

Tentei usar o p como parametro. Do jeito que tinha mostrado consigo executar tudo, porém ficam duas janelas sobrepostas e a ideia é de o frame principal somente chamar um panel de outro .java que executa um whitebox.

Seguindo seus passos so exibe a janela principal mesmo…

E essas linhas que você sugeriu dão erro:

JPanel jp = new JPanel(new BorderLayout); frame.add(jp);

Valeu aí!

Marky.Vasconcelos
javax.swing.JPanel jp = new javax.swing.JPanel(new javax.swing.BorderLayout());   
seuFrame.add(jp);
heliwow

Nesse caso ele so exibe o frame principal omitindo o panel. =\

Criado 26 de julho de 2005
Ultima resposta 25 de out. de 2007
Respostas 11
Participantes 6