[Dúvida]Afinal o que é um JPanel?

Pessoal, boa noite.
A pergunta é bem de iniciante mesmo.
O que é um JPanel?
Eu sei que ele serve como moldura para por os Componentes gráficos na tela como botões etc, e que também pode sobrepor paintComponent() etc.
Mais assim, ele tem algum desenho “gráfico” que diferencie ele de um frame?
Por exemplo, no código abaixo eu não consigo ver o que é um Painel…só sei que posso por coisas e desenhos nele e iram aparecer no Frame…

Alguem pode me dar um exemplo bem bobo e me explicar bem resumido mesmo o que é um JPanel e pra que ele serve?
Eu to conseguindo seguir os exercicios normais do Java use a cabeça, mais acho que faltava uma melhor explicação “Do que é um JPanel”.

[code]import java.awt.BorderLayout;
import javax.swing.*;

public class Principal{

public static void main(String[] args){
     JFrame myFrame = new JFrame();
     myFrame.setVisible(true);
     myFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //Se possível, gostaria tambem de saber o que essa linha faz? Não vi diferença sem ela.
     myFrame.setSize(400,300); 
     
     JPanel panel = new JPanel();
     panel.setSize(300, 200);
     
   
     myFrame.getContentPane().add(BorderLayout.CENTER,panel);
     
}

}[/code]

Obrigado pessoal, e desculpe incomodar o tempo de vocês com perguntas tão simples hehe.
Porém são as coisas mais bobas que eu acho as mais difícil conseguir as respotas…

O JPanel serve para receber diversos componentes, inclusive outros JPanels, que terão seu posicionamento gerenciado pelo layoutManager.

Você pode utilizá-lo para auxiliar na formação do layout (posicionamento) dos seus componentes em um frame, por exemplo.
Outro exemplo seria uma tela semelhante as de instalação de programas no Windows, que pode ser feito com um único frame que vai exibindo diversos JPanels com os “nexts” da vida até chegar no panel que possua o “finish”.

Um JFrame é bem mais complexo, existem diversas camadas que podem ser trabalhadas nele. Exemplo, quando um componente é adicionado ao frame com o método “add(Component)”, implicitamente está sendo adicionado no contentPane do frame, que costuma ser um JPanel.

Também não sou experiente, portanto se tiver algum conceito errado, me corrijam. :smiley:

1 curtida

Panels servem para organizar componentes, ou seja para se fazer telas complexas eles são muito uteis, voce ira utilizar varios, e cada um pode ter layouts diferentes, alem de cores e bordas diferentes tambem, para o design da tela ficar bacana.

quer ver o panel, de um setBackgroud, quer ver borda de um setBorder.

ex:

panel.setBackground(Color.RED);  //orrivel, mas é apenas pra voce ver

panel.setBorder(BorderFactory.createBevelBorder(BevelBorder.RAISED));  //aqui voce ve a borda.

//experimente tambem a TitledBorder  panel.setBorder(BorderFactory.createTitledBorder("titulo"));

Segue um exemplo que fiz agora só pra vc ter uma idéia, mas em resumo acho impossivel fazer telas sem o uso de varios panels, mesmo usando o Matisse, faço uso de panels


/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package acbrmonitor;

import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.FlowLayout;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.border.EtchedBorder;

/**
 *
 * @author Fred
 */
public class Testes extends JFrame {

    public Testes() {
        super("Teste");

        Container c = getContentPane();

        JPanel jpHeader = new JPanel();
        jpHeader.setBorder(BorderFactory.createEtchedBorder(EtchedBorder.RAISED));
        JLabel jlTitulo = new JLabel("Titulo...");
        jpHeader.add(jlTitulo, BorderLayout.CENTER);
        c.add(jpHeader, BorderLayout.NORTH);

        JPanel jpCenter = new JPanel();
        jpCenter.setBorder(BorderFactory.createEtchedBorder(EtchedBorder.RAISED));
        c.add(jpCenter, BorderLayout.CENTER);

        JPanel jpFooter = new JPanel(new FlowLayout(FlowLayout.RIGHT, 5, 5));
        jpFooter.setBorder(BorderFactory.createEtchedBorder(EtchedBorder.RAISED));
        JButton jbOK = new JButton("OK");
        jbOK.setPreferredSize(new Dimension(80, 25));
        jpFooter.add(jbOK);
        JButton jbFechar = new JButton("Fechar");
        jbFechar.setPreferredSize(new Dimension(80, 25));
        jpFooter.add(jbFechar);        
        c.add(jpFooter, BorderLayout.SOUTH);

        pack();
        setVisible(true);

    }
    public static void main(String[] args) {
       new Testes();
    }
}
1 curtida

Quanto ao método setDefaultCloseOperation, ele serve para definir o que será feito no momento de fechar JFrame. Da forma que está, a aplicação será encerrada, pois está sendo passada a constante EXIT_ON_CLOSE.

Existem outras constantes que podem ser passadas de acordo com a necessidade. Por exemplo, se você quisesse que ao tentar fechar o frame, nada acontecesse, deveria passar a constante DO_NOTHING_ON_CLOSE:

myFrame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
1 curtida

Em poucas palavras:

Um JFrame tem a barra do topo, com os botões de maximizar, minimizar e fechar. Ele representa a janela;
O JPanel é simplesmente uma área dentro do JFrame, um “espaço” onde componentes podem ser posicionados dentro.

Todo JFrame tem pelo menos um painel central.

3 curtidas

OK, intendi.
Obrigado a todos.
Então o JPanel não é um componente visual, estilo botões e caixas de texto.
Ele é como se fosse o “Papel de parede” para ser posto os outros componentes.

Fredferrao obrigado pelo exemplo, irei estuda-lo. :wink:

1 curtida