É possível? 3 Panels em 1 classe JPanel?

6 respostas
Manass_Brito

Caros amigos,

Tem como eu fazer 3 Panels em uma mesma classe JPanel, e depois na minha classe JFrame chamar esses panels e colocá-los em lugares diferentes?

A Situação é a seguinte:

  • Tenho um frame com 5 botões, eu fiz uma Classe extends JPanel e depois na minha Classe extends JFrame eu chamei o Panel e coloquei os botões no BorderLayout.CENTER.
  • Só que os botões ficaram muito pertos um do outro.
  • Gostaria, por exemplo, de colocar 2 botões no WEST, 2 botões no LEST e 1 botão no SOUTH.

Tem como eu fazer isso, utilizando somente uma Classe extends Jpanel? E quando na minha Classe extends JFrame eu chamar o Panel, colocá-los em lugares diferentes?

6 Respostas

WendersonLP

Bem, como você, ao chamar esse seu JPanel, inicializa-o você terá que cria métodos, na classe JPanel que você
criou, que inicialize os botões em posições diferentes na tela. Aí quando você chamar essa classe através do
JFrame você chama o método escolhido.

ex básico sem testes.

public class JPanelTeste extends JPanel {
     private JButton bt_1, bt_2, bt_3;

     public JPanelTeste(int posicao) {
           super();

           this.bt_1 = new JButton("Button1");
           this.bt_2 = new JButton("Button2");
           this.bt_3 = new JButton("Button3");

           this.configuraPosicao(posicao);

           this.setSize(200, 200);
           this.setVisible(true);
     }

     private void configuraPosicao(int posicao) {
        switch (posicao) {
             case 1:
                   this.posicao1();
                   break;
             case 2:
                   this.posicao2();
                   break;
             case 3:
                   this.posicao3();
                   break;
        }
     }

     private void posicao1() {
          this.add(this.bt_1, BorderLayout.WEST); 
          this.add(this.bt_2, BorderLayout.EAST); 
          this.add(this.bt_3, BorderLayout.SOUTH); 
     }

     private void posicao2() {
          this.add(this.bt_2, BorderLayout.WEST); 
          this.add(this.bt_3, BorderLayout.EAST); 
          this.add(this.bt_1, BorderLayout.SOUTH); 
     }

     private void posicao1() {
          this.add(this.bt_3, BorderLayout.WEST); 
          this.add(this.bt_1, BorderLayout.EAST); 
          this.add(this.bt_2, BorderLayout.SOUTH); 
     }
}

Bem, esse código eu não testei para ver se está funcionando perfeitamente, mas isso fica como uma
dica de como você pode fazer o que deseja.

Manass_Brito

Wenderson, olha só… eu fiz mais ou menos o q vc me sugeriu, só que os botões ficaram como se fossem FlowLayout (ou seja, um atrás do outro e não no West, East e South)… tô mandando o código pra vc dar uma olhada

Alguns métodos eu tirei o conteúdo pra diminuir o tamanho do post.

public class PanelAtendente extends JPanel {
	private static final long serialVersionUID = 1L;

	ImageIcon paciente, impressao, pedExame, pesquisa, sair;
	
	private JButton botaoPaciente, botaoImpressao, botaoPedidoExame, botaoPesquisa, botaoSair;
		
	public PanelAtendente() {
		paciente = new ImageIcon("/home/manasses/workspace/Projeto/Imagens/paciente.png");
		impressao = new ImageIcon("/home/manasses/workspace/Projeto/Imagens/imprimir.png");
		pedExame = new ImageIcon("/home/manasses/workspace/Projeto/Imagens/pedidoExame.png");
		pesquisa = new ImageIcon("/home/manasses/workspace/Projeto/Imagens/pesquisar.png");		
		sair = new ImageIcon("/home/manasses/workspace/Projeto/Imagens/sair.png");
		initialize();
	}

	private void initialize() {
		setLayout(new BorderLayout());
		setBorder(createBorder());
		add(posicionaBotao());
	}

	private JPanel posicionaBotao(){
		JPanel panel = new JPanel();
		panel.add(this.getBotaoPaciente(),BorderLayout.WEST);
		panel.add(this.getBotaoImpressao(), BorderLayout.WEST);
		panel.add(this.getBotaoPedidoExame(), BorderLayout.EAST);
		panel.add(this.getBotaoPesquisa(), BorderLayout.EAST);
		panel.add(this.getBotaoSair(), BorderLayout.SOUTH);
		return panel;
	}
	
	private JButton getBotaoPaciente() {
		if(botaoPaciente == null){
			botaoPaciente = new JButton("PACIENTE", paciente);
		}
		return botaoPaciente;
	}
	
	private JButton getBotaoImpressao() {
	}
	
	private JButton getBotaoPedidoExame() {
	}
	
	private JButton getBotaoPesquisa() {
	}
	
	private JButton getBotaoSair() {
	}
	
	public Border createBorder() {
	}
}
M

Sempre coloque seu código entre as tags de formatação. Assim:

// seu código aqui

Por favor edite o comentário acima para que o código fique legível.

WendersonLP

Bem, encontrei o que estava faltando.
Retire os métodos setVisible e setSize da classe JPanel que fiz, e defina o layout dessa
classe como setLayout(new BorderLayout()) e funcionará certinho.

class JPanelTeste extends JPanel {  
	      private JButton bt_1, bt_2, bt_3;  
	   
	      public JPanelTeste(int posicao) {  
	            super();  
	            super.setLayout(new BorderLayout());
	   
	            this.bt_1 = new JButton("Button1");  
	            this.bt_2 = new JButton("Button2");  
	            this.bt_3 = new JButton("Button3");  
	   
	            this.configuraPosicao(posicao);  
	      }  
	   
	      private void configuraPosicao(int posicao) {  
	         switch (posicao) {  
	              case 1:  
	                    this.posicao1();  
	                    break;  
	              case 2:  
	                    this.posicao2();  
	                    break;  
	              case 3:  
	                    this.posicao3();  
	                    break;  
	         }  
	      }  
	   
	      private void posicao1() {  
	           this.add(this.bt_1, BorderLayout.WEST);   
	           this.add(this.bt_2, BorderLayout.EAST);   
	           this.add(this.bt_3, BorderLayout.SOUTH);   
	      }  
	   
	      private void posicao2() {  
	           this.add(this.bt_2, BorderLayout.WEST);   
	           this.add(this.bt_3, BorderLayout.EAST);   
	           this.add(this.bt_1, BorderLayout.SOUTH);   
	      }  
	   
	      private void posicao3() {  
	           this.add(this.bt_3, BorderLayout.WEST);   
	           this.add(this.bt_1, BorderLayout.EAST);   
	          this.add(this.bt_2, BorderLayout.SOUTH);   
	     }  
}
Manass_Brito

Meu brother… no código que eu coloquei, não tem o setSize e nem o setVisible(true). Eles ficam dentro da classe com JFrame.

Então, eu coloquei super.setLayout(new BorderLayout()); dentro do construtor da classe PanelAtendente e rodei…

Mas não adiantou, os botões continuam como se fossem FlowLayout… ou seja, em lista, e não nos lugares que eu determinei.

Vc tem mais alguma sugestão?

WendersonLP

Olha só, aqui eu testei e está rodando perfeitamente.

Criado 9 de março de 2010
Ultima resposta 9 de mar. de 2010
Respostas 6
Participantes 3