A partir deste ponto de nossa apostila de Java, iremos criar nossa própria 'janela', ou seja, não vamos usar as janelas já feitas, como nas caixas de diálogo.
JFrame: Como criar Janelas em Java
JFrame: Como criar Janelas em Java
Porém, essa classe é que será responsável por criar a tela em que iremos desenhar, colocar botões, menus, caixas de texto e tudo mais que existem nas janelas de aplicativos.
Para fazer uso do JFrame, temos que importar essa classe do pacote swing, que contém diversas funcionalidades para programação gráfica:
import javax.swing.JFrame;
Cada objeto que criamos é um frame, ou janela, diferente. Uma aplicação normal tem dezenas ou centenas de frames.
Nessa seção vamos criar alguns objetos da classe JFrame passando uma String argumento para o construtor padrão, essa string será o título de nossa aplicação.
Esses JFrames, porém, possuem dezenas de funcionalidades e opções, usaremos as funcionalidades: o que ocorre quando clicamos no 'x' de close, adicionar panels, definir o tamanho do frame e se ele será visível ou não.
Como dissemos, o JFrame é uma Classe. E para criar uma classe, criamos um objeto.
Assim, nossa janela será um objeto chamado "janela".
Vamos passar uma string para o construtor dessa classe, que servirá como título de nosso frame/janela.
Porém, para vermos nosso frame, precisamos definir uma funcionalidade: que ele seja visível!
Pode parecer óbvio, mas um programa pode ter muitos, mas muitos frames, e obviamente não podemos exibir todos, senão nossa tela ficaria uma bagunça.
Assim, para exibir esse frame, usamos o método setVisible, que recebe true ou false.
Portanto, um simples programa em Java que cria e exibe um frame será:
import javax.swing.JFrame; public class framesPanels { public static void main(String[] args) { JFrame janela = new JFrame("Meu primeiro frame em Java"); janela.setVisible(true); } }
Note que vai ser criado uma janela, mas provavelmente você nem vai notar. Isso porque não fornecemos o tamanho da janela, então ela foi criado com 0 pixel de largura e 0 de altura.
Vamos usar o método setVisible, que recebe um tipo boolean. Como queremos a janela visível, colocamos true.
Caso queira definir um tamanho pré-definido, use o método setSize(), que recebe dois parâmetros com os pixels da janela (horizontal e vertical):
import javax.swing.JFrame; public class framesPanels { public static void main(String[] args) { JFrame janela = new JFrame("Meu primeiro frame em Java"); janela.setSize(300,200); janela.setVisible(true); } }
Para saber mais funcionalidades da classe JFrame, veja a documentação em:
http://docs.oracle.com/javase/6/docs/api/javax/swing/JFrame.html
JPanel: Inserido elementos em um JFrame
Como vimos, nosso frame está vazio. Só definimos o tamanho da 'moldura' e o título.Vamos adicionar alguns elementos ao nosso frame, e faremos isso inserindo um JPanel, onde nele podemos colocar uma infinidade de elementos, chamados JComponents:
http://www.apl.jhu.edu/~hall/java/Swing-Tutorial/Swing-Tutorial-JPanel.html |
Para usar o JPanel, importamos essa classe da package swing:
import javax.swing.JPanel;
Vamos criar uma classe que será nosso painel, vamos chamar de "Painel".
Para isso, basta fazer com que ela extends a JPanel, como aprendemos em Herança, para que herdemos todas as propriedades do JPanel.
import javax.swing.JPanel; public class Painel extends JPanel{ }
Na nossa classe principal, vamos criar um objeto do tipo "Painel" e chamar de "meuPainel".
Para adicionar esse JPanel em nosso JFrame, usamos o método add que recebe como argumento um JPanel:
Painel meuPainel = new Painel(); janela.add(meuPainel);
Embora tenha adicionado um Panel ao seu Frame, você não vai ver nada quando rodar, pois não adicionou nenhum elemento ao seu Panel.
Nos próximos tutoriais desta seção de GUI, vamos aprender como adicionar elementos no Panel.
Mas para não deixar você 'na mão', vamos mostrar um código da Panel que vai fazer um desenho bem bacana no seu JPanel/JFrame, o código completo é:
framesPanels.java
import javax.swing.JFrame; public class framesPanels { public static void main(String[] args) { JFrame janela = new JFrame("Meu primeiro frame em Java"); Painel meuPainel = new Painel(); janela.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE ); janela.add(meuPainel); janela.setSize(600,400); janela.setVisible(true); } }
Painel.java
import java.awt.Graphics; import javax.swing.JPanel; public class Painel extends JPanel{ public void paintComponent( Graphics g ){ super.paintComponent( g ); int pixel=0; for(pixel=0 ; pixel <= getHeight() ; pixel += 10){ g.drawLine(0, pixel, pixel, getHeight()); } for(pixel=getHeight() ; pixel >=0 ; pixel -= 10){ g.drawLine(0, pixel, getHeight() - pixel, 0); } for(pixel=0 ; pixel <= getHeight() ; pixel +=10){ g.drawLine(getWidth(), pixel, getWidth() - pixel, getHeight()); } for(pixel=getHeight() ; pixel >=0 ; pixel -= 10){ g.drawLine(getWidth(), pixel, getWidth() - (getHeight() - pixel), 0); } } }
Para mais detalhes sobre métodos e outras funcionalidades do JPanel, segue a documentação:
http://docs.oracle.com/javase/1.4.2/docs/api/javax/swing/JPanel.html
16 comentários:
...estou tentando usar:
import javax.swing.*;
...em uma aplicacao, mas fica aparecendo um quadrado vermelho com uma cruz branca (no eclipse)...
Tentei fazer mas da varios erros, na classe Painel ele não reconhece .paintComponnet e também o comando getHeight. Na classe framePanels ele não reconhece esse .add(meuPainel) o erro esta no add, alguem pode me ajudar?
Cerri, pouse o mouse em cima do símbolo vermelho ao lado, na linha do erro, que ele vai te dizer o motivo do erro.
Por exemplo, não é "Componnet" é "Component" que se escreve.
Você escreveu o código ou copiou e colou?
Criamos o projeto, criamos a clase framesPanels, colocamos seus códigos dentro...criamos a classe Painel e também inserimos seus códigos.
Rodamos a framesPanels e deu tudo ok, assim como devemos ter feito quando criamos este tutorial de Java.
Na postagem eu digitei errado, mas no código ta certo super.paintComponent(g); e quando passo o mouse pede pra renomear, mas o que esta errado?
Nesse caso do janela.add(meuPainel) quando passo o mouse da essa sugestão:
Component meuPainel = new Painel()
mas se faço isso o erro muda de lugar, começa da erro apos o sinal de = no new
Tem certeza mesmo que está exatamente igual ao de nosso código né?
Mande um print das telas, de cada classe e pouse o mouse em cima dos erros para aparecer a mensagem.
Envie pra: java.progressivo@gmail.com
Copiei e colei,funcionou OK.
Estou precisando de muuuita ajuda para popular um vector com dados inseridos num formulario JFrame... como faco isso?
Digitei e funcionou bem. Estou usando o NetBeans
Crie um programa que mostre um diálogo, informando que não existem
parâmetros, caso não seja passado nenhum parâmetro através da linha de
comando.
É mais fácil entender os erros do Code::Blocks.
Exception in thread "main" java.lang.NullPointerException
at java.awt.Container.addImpl(Container.java:1086)
at java.awt.Container.add(Container.java:998)
at javax.swing.JFrame.addImpl(JFrame.java:562)
at java.awt.Container.add(Container.java:410)
at teste.Teste.main(Teste.java:20)
Java Result: 1
Primeiramente parabéns pelo curso, i melhor que encontrei, é olha que vi vários.
Gostaria de saber com posicionar um JPanel dentro de um JFrame? Tentei usar setAlignmentX e Y é i setLocation mas não deu certo, sempre adiciona no alto e centralizado, quando coloco mais de um eles aparecem em sequencia no alto e centralizados.
Para dimensionar também não estou conseguindo, já tentei vá tentei várias coisas mas sempre aparece do tamanho do conteúdo.
Hum
Existe duas formas de se programar a GUI: Programando dessa forma, com código e mexendo com um sisteminha do NetBeans que facilita muito. Qual seria o mais eficaz e se vale a pena programar dessa forma que o site ensina??
Eu acho que é quando você cria um novo projeto, aparece
JRE System Libray[JavaSE-1.8]
src
ai o pacote
e abaixo do meu tinha um arquivo "module" que não sei para o que serve.
exclui este arquivo e parou de dar o erro no "Eclipse IDE"
estava dando problema com JFframe
Postar um comentário