JPanel com JFrame - Assuntos Gerais - GUJ
JPanel com JFrame
gqferreira Dezembro 6, 2008, 12:32pm #1
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:
Fabio_Baptista Dezembro 6, 2008, 4:50pm #2
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.
gqferreira Dezembro 6, 2008, 5:35pm #3
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.
gqferreira Dezembro 6, 2008, 5:36pm #4
nuss… :shock:
Como se coloca uma imagem aqui…
Achei que tinha ido mas não foi… :oops:
gqferreira Dezembro 6, 2008, 5:40pm #5
2008/12/6/4bd56e3b9c27fc5cc9bb294a569e4189_51845.jpg1280×1024 39.3 KB
Fabio_Baptista Dezembro 6, 2008, 7:44pm #6
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,
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 {
jPanel1.setBackground(new java.awt.Color(51, 255, 102));
.addContainerGap(150, Short.MAX_VALUE)
.addContainerGap(123, Short.MAX_VALUE)
jPanel3.setBackground(new java.awt.Color(255, 102, 102));
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel3Layout.createSequentialGroup()
.addContainerGap(395, Short.MAX_VALUE)
.addContainerGap(125, Short.MAX_VALUE)
jPanel4.setBackground(new java.awt.Color(51, 255, 102));
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel4Layout.createSequentialGroup()
.addComponent(jPanel3, 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))
.addComponent(jPanel3, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
add(jPanel2, java.awt.BorderLayout.CENTER);
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
frame.setContentPane(new teste());
gqferreira Dezembro 6, 2008, 8:38pm #7
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:
gqferreira Dezembro 6, 2008, 10:16pm #8
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.
douglas_vidotto Dezembro 8, 2008, 10:17am #9
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 é:
class Janela{
Janela janela = new Janela();
janela.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
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??
douglas_vidotto Dezembro 8, 2008, 10:20am #10
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.
Marky.Vasconcelos Dezembro 8, 2008, 10:24am #11
[quote=gqferreira]Complicado heim… :shock:
Prefiro o Eclipse como editor de código e fazendo o layout com o JGoodies.
gqferreira Dezembro 8, 2008, 9:09pm #12
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.
marcobiscaro2112 Dezembro 9, 2008, 8:26am #13
100% Eclipse!
Já existe aquele velho ditado:
Idiotas podem fazer programas que computadores entendem. Bons programadores (e boas IDE's ) 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…