JPanel com JFrame

Olá pessoal, boa tarde.
Sou um iniciante em Java (Iniciante mesmo).

Ouvi falar em JPanels e +/- como se usa, mas não entendo explicação nenhuma que acho na net, teria como vocês me darem um exemplo de como criar dois painéis e colocar um botão em cada um, em seguida adicioná-lo ao frame?
Mas isso em um método que não seja o main.

Desculpe a minha ignorância, é que não sei quase NADA em Java!

Valeu gente! :thumbup:

ola gqferreira,

não entendi direito sua dúvida, mas tem algum código que está trabalhando para postar, acho que fica mais fácil pra dar alguma explicação.

abraço

Bom…O código fonte não tenho porque estou tentando fazer um frame como este, ainda não consegui, por isso não tenho o código.
Eu estou tentando fazer um frame como o dessa imagem, só que, como vocês percebem, quando o frame é maximizado os paineis ficam amontoados na posição de origem do frame, eu tento reproduzir este frame e centralizá-los qundo o frame for maximizado.
Quando o frame é iniciado, os paineís estão certinhos, não sobra espaço, isso é porque a soma dos tamanhos deles são suficientes para ocupar o frame sem sobrar nem faltar espaço.

Espero por ajuda, tá difíciul achar na net uma coisa que parece simples (eu não sei…rsrs…), quando acho falando sobre painéis sempre tem algo a mais e acaba me confundindo todo.

Valeu gente! :thumbup:

nuss… :shock:

Como se coloca uma imagem aqui…
Achei que tinha ido mas não foi… :oops:

Gustavo

Achei…

rsrsrs… :wink:


Certo, olha a principio de uma estudada em layouts, depoios de escolher o melhor layout para acomodar os componentes, você precisa setar a prorpiedade de redimensionamento dos JPanels,

http://java.sun.com/docs/books/tutorial/uiswing/layout/using.html

Se foi isso que entendi, segue um exemplo feito no editor visual do NetBeans, alguns são contra esse tipo de desenvolvimento de GUIs, mas vai lá…



public class teste extends javax.swing.JPanel {

    public teste() {
        initComponents();
    }

    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">
    private void initComponents() {

        jPanel2 = new javax.swing.JPanel();
        jPanel1 = new javax.swing.JPanel();
        jButton1 = new javax.swing.JButton();
        jPanel3 = new javax.swing.JPanel();
        jButton3 = new javax.swing.JButton();
        jPanel4 = new javax.swing.JPanel();
        jButton2 = new javax.swing.JButton();

        setLayout(new java.awt.BorderLayout());

        jPanel1.setBackground(new java.awt.Color(51, 255, 102));

        jButton1.setText("jButton1");

        javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
        jPanel1.setLayout(jPanel1Layout);
        jPanel1Layout.setHorizontalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup()
                .addContainerGap(150, Short.MAX_VALUE)
                .addComponent(jButton1)
                .addContainerGap())
        );
        jPanel1Layout.setVerticalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup()
                .addContainerGap(123, Short.MAX_VALUE)
                .addComponent(jButton1)
                .addContainerGap())
        );

        jPanel3.setBackground(new java.awt.Color(255, 102, 102));

        jButton3.setText("jButton3");

        javax.swing.GroupLayout jPanel3Layout = new javax.swing.GroupLayout(jPanel3);
        jPanel3.setLayout(jPanel3Layout);
        jPanel3Layout.setHorizontalGroup(
            jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel3Layout.createSequentialGroup()
                .addContainerGap(395, Short.MAX_VALUE)
                .addComponent(jButton3)
                .addContainerGap())
        );
        jPanel3Layout.setVerticalGroup(
            jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel3Layout.createSequentialGroup()
                .addContainerGap(125, Short.MAX_VALUE)
                .addComponent(jButton3)
                .addContainerGap())
        );

        jPanel4.setBackground(new java.awt.Color(51, 255, 102));

        jButton2.setText("jButton2");

        javax.swing.GroupLayout jPanel4Layout = new javax.swing.GroupLayout(jPanel4);
        jPanel4.setLayout(jPanel4Layout);
        jPanel4Layout.setHorizontalGroup(
            jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel4Layout.createSequentialGroup()
                .addContainerGap(156, Short.MAX_VALUE)
                .addComponent(jButton2)
                .addContainerGap())
        );
        jPanel4Layout.setVerticalGroup(
            jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel4Layout.createSequentialGroup()
                .addContainerGap(123, Short.MAX_VALUE)
                .addComponent(jButton2)
                .addContainerGap())
        );

        javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2);
        jPanel2.setLayout(jPanel2Layout);
        jPanel2Layout.setHorizontalGroup(
            jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(jPanel3, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
            .addGroup(jPanel2Layout.createSequentialGroup()
                .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jPanel4, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );
        jPanel2Layout.setVerticalGroup(
            jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel2Layout.createSequentialGroup()
                .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                    .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(jPanel4, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jPanel3, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );

        add(jPanel2, java.awt.BorderLayout.CENTER);
    }// </editor-fold>


    // Variables declaration - do not modify
    private javax.swing.JButton jButton1;
    private javax.swing.JButton jButton2;
    private javax.swing.JButton jButton3;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JPanel jPanel2;
    private javax.swing.JPanel jPanel3;
    private javax.swing.JPanel jPanel4;
    // End of variables declaration

}

você comentou alguma coisa sobre colocar um panel dentro do JFrame, o arquivo pra iniciar segue essa logica pra voce entender…
perceba que a classe teste herda de JPanel, por isso você está adicionando um Panel

import javax.swing.JFrame;

public class Main {

    public static void main(String[] args) {
        JFrame frame = new JFrame();
        frame.setContentPane(new teste());
        frame.pack();
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }

}

espero ter ajudado

Complicado heim… :shock:

Não gosto do NetBeans por achar que ele gera muito “lixo” no código mas nada contra quem usa. :?

Mas valeu, vou tentar. :thumbup:

Tá ai gente, para quem procurou este assunto no fórum, eu consegui (apanhando muito). Para ajudar, estou colocando o código no fórum.
Eu zipei para poder passar todos os arquivos de uma só vêz.

E ae GqFerreira, tudo bem? Eu também estou iniciando em Java e ando dando uma lida em como trabalhar com janelas e tudo o mais. Pelo que entendi, funciona assim. Primeiro voce deve instanciar uma classe JFrame que corresponderá a sua janela. O JPanel corresponde à uma moldura dentro da janela. Nesse JPanel será onde você colocará as figuras, imagens, etc. Para cada elemento que voce criar, como um botao, uma JPanel, etc, voce deve adicioná-los dentro do JFrame usando um método dessa classe. Um código de exemplo simples para uma janela é:

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

class Janela{

JButton botao;

public static void main(String[] args){

  Janela janela = new Janela();
  janela.testa();

}

public void testa(){

    JFrame frame = new JFrame("Teste");
    botao = new JButton("Clique aqui");

    frame.setSize(400,400); //Estabelece o tamanho da janela
    frame.setDeFaultCloseOperation(JFrame.EXIT_ON_CLOSE);//Diz à janela para fechar no botao x
    frame.getContentPane().add(BorderLayout.SOUTH, botao);//Coloca o botao mais embaixo na tela
    frame.setVisible(true); //Para tornar a janela visível, você precisa usar esse método

}

}//fim da classe janela[/code]

A classe acima é bem simples. Você só colocou um botão em uma janela. Abaixo segue uma JPanel também bem simples

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

class UmPainel extends JPanel{

public void paintComponent(Graphics graph){

   int vermelho = (int) (Math.random() * 255);
   int verde = (int) (Math.random() * 255);
   int azul = (int) (Math.random() * 255);

   Color cor = new Color(vermelho,verde,azul);
  
    //Cria uma moldura de fundo preto
   graph.fillRect(0,0,this.getWidth(), this.getHeight());

   g.setColor(cor);//Estabelece uma cor aleatória no círculo

   graph.fillOval(100,100,100,100); //Cria um círculo colorido

}//fim da classe um painel[/code]

Para adicionar esse painel na janela, é só usar o método add do JFrame

Bom, eu fiz esse exemplo baseado no livro da Kathy Sierra, o Use Cabeça. Mas aqui eu não coloquei evento no botão e tals. Mas uma coisa que te digo é que mexer com swing não é mole não. São muitos métodos e detalhes para se guardar. Se você é novo em Java, eu recomendo dar uma estudada do início, fazendo programas em linha de comando primeiro. Não sei se tudo que fiz acima tá correto. Qualquer coisa peço para o pessoal do fórum me corrigir, ok??

Abraços e espero ter ajudado

Outra coisa que esqueci de falar. Toda vez que o painel for utilizado, o método paintComponent é chamado automaticamente. Portanto, você coloca dentro de paintComponent as imagens que voce usará dentro da moldura.

[quote=gqferreira]Complicado heim… :shock:

Não gosto do NetBeans por achar que ele gera muito “lixo” no código mas nada contra quem usa. :?
[/quote]

[2]

Prefiro o Eclipse como editor de código e fazendo o layout com o JGoodies.

Concordo, é melhor usar o eclipse e para fazer o Layout eu uso o GuiGenie, mas ele é muito fraquinho, já ouvi falar desse JGoodies mas fucei na net e não achei, se puderem me dar um luz de como achar esse programa!?

O programa que uso está disponível nesse endereço:
http://www.guigenie.cjb.net/

Acho que ainda não falei o meu nome desde o início do tópico, é Gustavo.
:wink:

100% Eclipse!

Já existe aquele velho ditado:
Idiotas podem fazer programas que computadores entendem. Bons programadores (e boas IDE’s :wink: ) podem fazer programas e códigos que pessoas entendem. Para um ser humano comum, com um QI dentro dos “padrões mundiais de normalidade” é impossível entender o código gerado pelo NetBeans, mesmo os mais simples…

Recomendo o plugin Visual Editor, fácil de usar, bem completo e gera código compreensível.

Pode ser baixado aqui: http://www.ehecht.com/eclipse_ve/ve.html

Valeu aê Marcos… :thumbup: :thumbup: :thumbup: