Diferenças entre JFrame e JPanel, e centralização

3 respostas
A

Pessoal,
estou devagarinho entendendo, mas gosto de analisar linha por linha do código, portanto estou utilizando o Eclipse e construindo tudo no braço.
Não reparem nos comentários no código, que são parte de testes que realizei.
Construí um JFrame que contém um ComboBox, que é alimentado pelo banco.
Pergunta: Criei um JFrame ou um JPanel?
Afinal, qual a diferença entre os dois? Alguém poderia postar um código simplíssimo de um JFrame contendo um JPanel? Ou não preciso disso?
Ou preciso obrigatoriamente de um JPanel para poder centralizá-lo na tela do monitor?
Li um tópico semelhante da RenataFA em que o Vini comenta sobre o assunto, mas como ainda sou uma pequena criança em JAVA, não entendi muito não...

Segue meu código para que comentem.

Muito Obrigado,
package swing;
import javax.swing.*;  

import java.awt.*;  
import java.awt.event.*; 
import java.sql.ResultSet;
import java.sql.SQLException;

import loja.*;
  
public class MostraInstrumentoCombo extends JFrame {  
   private JComboBox combo;  
   private JButton botao;    
   Instrumento inst = new Instrumento();
   
   ResultSet rs = inst.consultaParaComboBox();
   public MostraInstrumentoCombo() throws SQLException {  
      Container contentPane = this.getContentPane();  
     // this.setLocationRelativeTo(null);
      JPanel painel = new JPanel();  
    // this.getParent().setLayout(null);  
    //  painel.setBounds(new Rectangle(posicaoX,posicaoY,largura,altura));  
      painel.repaint(); 
      combo = new JComboBox(); 
      
      while(rs.next()){
			
      combo.addItem(rs.getString("Instrumento"));  
      }
      botao = new JButton("Clique");  

 /*     botao.addActionListener(
    		  new ActionListener() {  
          public void actionPerformed(ActionEvent e) 
          {  
             String getcombo = (String) combo.getSelectedItem();  
             JOptionPane.showMessageDialog(null,"Instrumento: "+getcombo);  
          }
       }
    		  ); */
      
    		  ActionListener acaoBotao = new ActionListener() 
    		  {  
    			  public void actionPerformed(ActionEvent e) 
    			  	{  
    				  String getcombo = (String) combo.getSelectedItem();  
    				  JOptionPane.showMessageDialog(null,"Instrumento: "+getcombo);  
    			  	}
    		  };
      
     
    		  botao.addActionListener(acaoBotao);
        
      painel.add(combo);  
      painel.add(botao);  
      
      contentPane.add(painel, BorderLayout.NORTH);  
        
      this.setTitle("Exemplo JComboBox Instrumento");  
      this.pack();  
      this.setVisible(true);  
   }
   public static void main(String args[]) throws SQLException{
	   MostraInstrumentoCombo mic = new MostraInstrumentoCombo();
	   mic.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
   }
     
     
}

3 Respostas

R

@Airmigjr

Então brother, o JFrame é uma Janelinha só… O JPanel é um “container” que vai guardar os JComponents (JButton,JLabel…).

Eu também sou iniciante, mas não custa nada tentar ajudar :slight_smile:

Eu nunca consegui mostrar JComponents sem JPanel. Sempre tive q criar um JPanel para organizar e mostrar os JComponents:

public class Janelinha extends JFrame;
   private JPanel panel;
   private JLabel label1;
   private JButton button1;
 
 public Janelinha(){
   
   this.initialize();
   this.setExtendedState(MAXIMIZED_BOTH);
 }

 public void initialize(){
  panel = new JPanel();
    panel.setBounds(0,0,400,400); // Seta a posição do JPanel... Porém se vc add 1 iten no JPanel o setBounds dos outros JComponents n funciona mais, ao menos pra mim...
    panel.setBackground(Color.black);
  
  label1 = new JLabel();
    label1.setText("Hello World!"); 
  
  button1 = new JButton();
    button1.setText("doNothing");

 this.add(panel); //add o JPanel no JFrame
 panel.add(label); // add a label no JPanel
 panel.add(button1);// add o botão no JPanel
 this.show(); // mostra a parada tudo
 }
 
 public static void main(String a[]){
  Janelinha jan = new Janelinha(); 
 }
}
F

Seguinte basicamente a grosso modo falando: JFrame, JDialog, JInternalFrame saum janelas e containers de JPanel, pois contem um JPanel ou varios JPanel. O JPanel eh container de componentes, como exemplo JLabel, JTextField, JComboBox, JCheckBox etc…etc…etc.

exemplo

public class MeuFrame extends JFrame{ //aqui a janela q eh container de JPanel
     private JPanel p1; //aqui o atributo p1 q eh uma referencia a um JPanel(container de componentes);
     private JButton btn1;
     public MeuFrame(){
          p1 = new JPanel(); //crio o objeto p1 q eh um JPanel
          btn1 = new JButton(20); //JButton
          p1.add(btn1); //adiciona o JButton ao p1(JPanel)
          this.add(p1); //adiciono o objeto p1 ao frame(JFrame)
     }
}

Para saber como tudo funciona, e o que eh cada item leia e estude sobre Swing…Esse tipo de pergunta ja deve ter sido umas 1000x respondidas aqui, agora 1001…kkk !!

t+ e boa sorte.

A

Gente, obrigado. Estou juntando informações para entender melhor o funcionamento deste framework.

Sds,

airmigjr

Criado 25 de outubro de 2011
Ultima resposta 27 de out. de 2011
Respostas 3
Participantes 3