Вы находитесь на странице: 1из 36

20395 - Programao de Aplicativos 1

Professor: Esp. Dhiego Tosatti


MSc. Karl Phillip Buhr
Crditos: 3
Fase: 4

Swing
A API de Java 2D disponibiliza um pacote robusto com
ferramentas de desenho para desenvolvimento de
grficos elegantes e profissionais de alta qualidade.
Estas funcionalidades foram introduzidas como parte do
JFC (Java Foundation Classes) no Java 2.
Nesta seo iremos ter uma viso geral de vrias
capacidades do Java 2D para desenhar formas
bidimensionais, controlar cores e fontes.
Um dos atrativos iniciais do Java foi seu suporte a
imagens grficas que permitia aos programadores
aprimorar visualmente seus aplicativos.
Java 2D http://docs.oracle.com/javase/tutorial/2d/
Swing
Atualmente, o Java possui muitas capacidades mais
sofisticadas de desenho como parte do Java 2D.
Esta API permite realizar as seguintes tarefas:
Desenhar linhas, retngulos, elipses, curvas e outras
formas geomtricas;
Preencher estas formas com cores slidas ou gradientes e
texturas;
Desenhar texto com opes de controle sobre a fonte e o
processo de renderizao;
Desenhar imagens, com a opo de executar operaes
com filtros;
Java 2D
Swing
Um mecanismo para deteco de coliso de formas, texto
e imagens;
Suporte a impresso de documentos complexos;
Controle sobre a qualidade de renderizao.

Este pacote permite o desenvolvimento de interfaces
ricas e complexas, programas sofisticados de
desenho e editores de imagens.
Java 2D
Swing
Utilizao de Java 2D para produzir grficos
complexos:



Utilizao de Java 2D para realizar operaes de
filtragem em imagens:
Java 2D
Swing
Antes de comear a fazer desenhos com Java 2D
necessrio entender o sistema de coordenadas da
tela. Este sistema permite posicionar um pixel (um
ponto de cor) em uma localizao especfica na
janela.
Pixel a menor unidade de resoluo do monitor de
vdeo.
O sistema de coordenadas da tela pode ser visto
como uma variao do sistema de coordenadas do
plano cartesiano, onde a origem (0,0) localizada no
canto superior esquerdo.
Java 2D
Swing
Para posicionar um pixel na janela, que uma
superfcie 2D, utilizamos a notao do plano de
coordenadas cartesiano (x, y) para referenciar uma
posio especfica, onde:
x especifica o deslocamento horizontal a partir da origem;
y especifica o deslocamento vertical a partir da origem;
Java 2D
Swing
Java 2D Origem do sistema de coordenadas
Swing
Atravs do sistema de coordenadas podemos especificar
o local exato de desenho das formas geomtricas:
Java 2D
Swing
A figura a seguir mostra uma parte da hierarquia de
classes do Java 2D que inclui vrias das classes grficas
bsicas e as vrias classes e interfaces que
investigaremos durante as aulas:
Java 2D
Swing
A classe Color contm mtodos e constantes para
manipular cores.
A classe JComponent contm o mtodo
paintComponent(), que utilizado para pintar um
componente na tela.
A classe Font contm mtodos e constantes para
manipular fontes.
A classe FontMetrics contm mtodos para obter
informaes de fonte.
A classe Graphics contm mtodos para desenhar
strings, linhas, retngulos e outras formas.

Java 2D
Swing
A classe Graphics2D, que extende a classe Graphics,
utilizada para desenhar com a API Java 2D.
A classe Polygon contm mtodos para criar polgonos.
A metade inferior da figura lista vrias classes e interfaces
da API Java 2D.
A classe BasicStroke ajuda a especificar as caractersticas
do desenho de linhas.
As classes GradientPaint e TexturePaint ajudam a
especificar as caractersticas para preencher formas com
cores ou padres.

Java 2D
Swing
As classes GeneralPath, Line2D, Arc2D, Ellipse2D,
Rectangle2D e RoundRectangle2D representam vrias
formas 2D disponibilizadas pelo Java.
Java 2D
Swing
Demo 1
class CustomPanel extends JPanel {
public void paintComponent(Graphics g)
{
// Chama o paintComponent() da superclasse para pintar primeiro
super.paintComponent(g);

// Desenha o primeiro retangulo esquerda
g.drawRect(0, 0, 200, 50);

// Desenha o segundo retangulo direita
g.drawRect(200, 100, 100, 200);
}
}
http://docs.oracle.com/javase/7/docs/api/java/awt/Graphics.html
Swing
Exerccio 1
Swing
Um contexto grfico o que nos permite desenhar na
tela.
Entretanto, somente atravs de um objeto Graphics
que conseguimos realizar esta tarefa. Ele gerencia um
contexto grfico e desenha pixels na tela que
representam texto e outros objetos grficos, como por
exemplo: linhas, elipses, retngulos e outros polgonos.
O objeto Graphics contm mtodos para desenhar,
manipular fontes, cores e coisas do tipo.
A classe Graphics uma classe abstract. Ou seja, no
possvel instanciar um objeto deste tipo.
Contextos Grficos e Objetos Grficos
Swing
Quando o Java implementada em cada plataforma,
criada subclasse de Graphics apropriada para aquela
plataforma que implementa as capacidades de desenho.
Lembre-se das aulas anteriores, onde vimos que a classe
Component a superclasse de muitas classes de
java.awt.
A classe JComponent, oferecida no pacote javax.swing,
fornece o mtodo paintComponent() que pode ser
utilizado para desenhar imagens grficas:
public void paintComponent(Graphics g)
Contextos Grficos e Objetos Grficos
Swing
public void paintComponent(Graphics g)

O mtodo acima recebe um objeto Graphicscomo um
argumento.
Este objeto passado para o mtodo pelo sistema
sempre que um componente Swing (lightweight) precisa
ser pintado.
O programador raramente invoca este mtodo no cdigo
diretamente, porque toda a parte grfica do Java
baseada em eventos.
Contextos Grficos e Objetos Grficos
Swing
Ao criar uma GUI, a JVM inicializa uma thread de
despacho de evento (Event Dispatch Thread EDT), que
utilizada para processar todos os eventos GUI.
A partir de ento, todo o desenho e manipulao dos
componentes da GUI so realizados por esta thread.
Quando um aplicativo GUI executado, o continer de
aplicativo chama o mtodo paintComponent() (na EDT)
para cada componente lightweight a medida que a GUI
exibida na tela.
Contextos Grficos e Objetos Grficos
Swing
Assim, para que paintComponent() seja chamado
novamente, deve ocorrer um novo evento, como a janela
ser redimensionada, ou quando um componente da GUI
coberto por uma outra janela, forando assim o
redesenho da GUI.
Se voc precisar invocar paintComponent() no cdigo,
como por exemplo, para atualizar os elementos grficos
desenhados em um componente Swing, voc deve
invocar o mtodo repaint(), que por sua vez, se
encarrega de efetuar uma chamada a paintComponent():
public void repaint();
Contextos Grficos e Objetos Grficos
Swing
Demo 2
class CustomPanel extends JPanel {
public void paintComponent(Graphics g)
{
super.paintComponent(g);

// Desenha um retangulo
g.drawRect(0, 0, 200, 50);
// Desenha uma linha
g.drawLine(80, 100, 230, 220);
// Desenha uma elipse
g.drawOval(250, 250, 75, 90);
}
}
http://docs.oracle.com/javase/7/docs/api/java/awt/Graphics.html
Swing
Exerccio 2
Swing
Exerccio 3
Swing
Exerccio 4
Escreva o mtodo drawTriangle() conforme as
especificaes a seguir:
Modificador e Tipo Mtodo e Descrio
private void drawTriangle(Graphics g,
int x1, int y1,
int x2, int y2,
int x3, int y3)
Desenha um tringulo a partir de 3 pontos 2D.
// corpo
drawTriangle(g, 100, 410, 200, 250, 300, 410);
// face
g.drawOval(100, 50, 190, 200);
// mos
g.drawOval(100, 260, 42, 42);
g.drawOval(260, 260, 42, 42);
// boca
g.drawLine(183, 216, 215, 230);
// armao do culos
g.drawLine(100, 133, 290, 133);
// lentes dos culos
g.drawRect(132, 122, 50, 38);
g.drawRect(215, 122, 50, 38);
Swing
Exerccio 4 (continuao)
Swing
Demo 3
class CustomPanel extends JPanel {
public void paintComponent(Graphics g)
{ super.paintComponent(g);
// fundo (background)
Color azulcalcinha = new Color(173, 236, 255);
g.setColor(azulcalcinha);
g.fillRect(0, 0, 400, 400);
// corpo
g.setColor(new Color(0, 255, 0));
drawTriangle(g, 100, 410, 200, 250, 300, 410);
// face
g.setColor(new Color(250, 212, 147));
g.fillOval(100, 50, 190, 200);
...
Swing
Exerccio 5
Swing
Exerccio 6
Swing
The power of the docs!
java.awt.Graphics
http://docs.oracle.com/javase/7/docs/api/java/awt/Graphics.html
public void paintComponent(Graphics g)
{
super.paintComponent(g);
this.setBackground(Color.WHITE);

// set new drawing color using integers
g.setColor( new Color( 255, 0, 0 ) );
g.fillRect(15, 25, 100, 20);
g.drawString("Current RGB: " + g.getColor(), 130, 40);
...

Вам также может понравиться