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

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,

[code]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);
}

}
[/code]

@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(); 
 }
}

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.

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

Sds,

airmigjr