Java 2D
Marco Antonio
Java2D
• Conjunto de classes para trabalhar com
gráficos e imagens.
• A principal classe desta API é
JComponent.
• Com esta classe é possível criar
componentes personalizados para suas
aplicações gráficas.
ComponenteGeometrico
package com.java2d.geometria;
import java.awt.*;
import java.awt.geom.*;
import javax.swing.*;
@SuppressWarnings("serial")
public class ComponenteGeometrico extends JComponent {
private boolean solido;
private Color cor;
private double y;
private double x;
public ComponenteGeometrico(boolean solido, Color cor, int x, int y) {
this.solido = solido;
this.cor = cor;
this.x = x;
this.y = y;
}
@Override
protected void paintComponent(Graphics g) {
//
super.paintComponent(g);
//
Graphics2D grafico = (Graphics2D) g;
//
grafico.setPaint(cor);
Rectangle2D retangulo = new Rectangle2D.Double(x, y, 50, 50);
if (solido) {
grafico.fill(retangulo);
} else {
grafico.draw(retangulo);
}
}
}
TelaDeTeste
package com.java2d.geometria;
import java.awt.*;
import javax.swing.*;
@SuppressWarnings("serial")
public class TelaDeTeste extends JFrame {
public TelaDeTeste() {
//
ComponenteGeometrico componente1 = new ComponenteGeometrico(true, Color.GRAY, 10, 10);
getContentPane().add(componente1);
//
setSize(300, 200);
setVisible(true);
}
public static void main(String[] args) {
new TelaDeTeste();
}
}
ComponenteGeometrico
• Acrescente os métodos de acesso como
no exemplo:
public void setX(double x) {
this.x = x;
}
public void setY(double y) {
this.y = y;
}
TesteMovimentacaoCompGeo
package com.java2d.geometria;
import java.awt.*;
import javax.swing.*;
@SuppressWarnings("serial")
public class TesteMovimentacaoCompGeo extends JFrame {
ComponenteGeometrico componente1;
public TesteMovimentacaoCompGeo() {
componente1 = new ComponenteGeometrico(true, Color.GRAY, 10, 10);
//
getContentPane().add(componente1);
//
setSize(300, 200);
setVisible(true);
}
public void movimentaComponente() {
int i = 0;
while (true) {
i++;
componente1.setX(10 + i);
TelaDeTeste
package com.java2d.geometria;
import java.awt.*;
import javax.swing.*;
@SuppressWarnings("serial")
public class TelaDeTeste extends JFrame {
public TelaDeTeste() {
//
ComponenteGeometrico componente1 = new ComponenteGeometrico(true,
Color.GRAY, 10, 10);
ComponenteGeometrico componente2 = new ComponenteGeometrico(false,
Color.BLUE, 10, 10);
componente1.setBorder(BorderFactory.createLoweredBevelBorder());
componente2.setBorder(BorderFactory.createLoweredBevelBorder());
getContentPane().setLayout(new GridLayout(1, 0));
getContentPane().add(componente1);
getContentPane().add(componente2);
// /
setSize(300, 200);
setVisible(true);
}
public static void main(String[] args) {
new TelaDeTeste();
}
}
Circulo
package com.java2d.geometria;
import java.awt.*;
import java.awt.geom.*;
import javax.swing.*;
@SuppressWarnings("serial")
public class Circulo extends JComponent {
protected Color cor;
protected int x;
protected int y;
protected int raio;
public Circulo(Color cor, int x, int y, int raio) {
this.cor = cor;
this.x = x;
this.y = y;
this.raio = raio;
}
@Override
protected void paintComponent(Graphics graficos) {
super.paintComponent(graficos);
Graphics2D g = (Graphics2D) graficos;
g.setColor(cor);
Ellipse2D.Float circulo = new Ellipse2D.Float(x - raio, y - raio, raio * 2, raio * 2);
g.fill(circulo);
}
}
TesteCirculo
package com.java2d.geometria;
import java.awt.*;
import javax.swing.*;
@SuppressWarnings("serial")
public class TesteCirculo extends JFrame {
public static void main(String[] args) {
new TesteCirculo();
}
TesteCirculo() {
//
setSize(600, 400);
//
Circulo circulo = new Circulo(Color.BLUE, getWidth() / 2,
getHeight() / 2, 80);
getContentPane().add(circulo);
//
setVisible(true);
//
}
}
Retangulo
package com.java2d.geometria;
import java.awt.*;
import java.awt.geom.*;
import javax.swing.*;
public class Retangulo extends JComponent {
protected Color cor;
protected int x;
protected int y;
protected int largura;
protected int altura;
protected double angulo;
public void setAngulo(double angulo) {
this.angulo = angulo;
}
public Retangulo(Color cor, int x, int y, int largura, int altura) {
this.cor = cor;
this.x = x;
this.y = y;
this.largura = largura;
this.altura = altura;
}
protected void paintComponent(Graphics graficos) {
super.paintComponent(graficos);
Graphics2D g = (Graphics2D) graficos;
// g.clearRect(0, 0, 600, 400);
g.setColor(cor);
Rectangle2D.Float retangulo = new Rectangle2D.Float(x, y, largura, altura);
g.draw(retangulo);
//
}
Retangulo
public void limpaTela() {
Graphics2D g = (Graphics2D) getGraphics();
g.clearRect(0, 0, Toolkit.getDefaultToolkit().getScreenSize().width,
Toolkit.getDefaultToolkit().getScreenSize().height);
}
}
TesteRetangulo
package com.java2d.geometria;
import java.awt.*;
import javax.swing.*;
@SuppressWarnings("serial")
public class TesteRetangulo extends JFrame {
Retangulo retangulo;
TesteRetangulo() {
//
setSize(600, 400);
//
retangulo = new Retangulo(Color.BLUE, getWidth() / 2, getHeight() / 2, 40, 140);
getContentPane().add(retangulo);
//
setVisible(true);
//
}
public static void main(String[] args) {
new TesteRetangulo();
}
}
CirculoListener
package com.java2d.geometria;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
@SuppressWarnings("serial")
public class CirculoListener extends Circulo implements MouseListener {
public CirculoListener(Color cor, int x, int y, int raio) {
super(cor, x, y, raio);
addMouseListener(this);
}
@Override
public void mouseClicked(MouseEvent e) {
Point ponto = e.getPoint();
String mensagem = "Coordenada (x,y): " + ponto.x + ", " + ponto.y;
JOptionPane.showMessageDialog(null, mensagem); }
@Override
public void mouseEntered(MouseEvent e) {
}
@Override
public void mouseExited(MouseEvent e) {
}
@Override
public void mousePressed(MouseEvent e) {
}
@Override
public void mouseReleased(MouseEvent e) {
}
}
TesteCirculoListener
package com.java2d.geometria;
import java.awt.*;
import javax.swing.*;
@SuppressWarnings("serial")
public class TesteCirculoListener extends JFrame {
public static void main(String[] args) {
new TesteCirculoListener();
}
TesteCirculoListener() {
//
setSize(600, 400);
//
CirculoListener circulo = new CirculoListener(Color.BLUE, getWidth() / 2, getHeight() / 2, 80);
getContentPane().add(circulo);
//
setVisible(true);
//
}
}
PaintBrush
package com.java2d.geometria;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;
@SuppressWarnings("serial")
public class PaintBrush extends JComponent implements MouseListener {
private Collection<Point> pontos;
private int LARGURA = 8;
private int ALTURA = 8;
public PaintBrush() {
addMouseListener(this);
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
for (Point ponto : getPontos()) {
g.fillOval(ponto.x - 5, ponto.y - 5, LARGURA, ALTURA);
}
}
public void mouseClicked(MouseEvent e) {
getPontos().add(e.getPoint());
repaint();
}
public Collection<Point> getPontos() {
if (pontos == null) {
pontos = new ArrayList<Point>();
}
return pontos;
}
//{... demais métodos da interface}
}
TestePaintBrush
package com.java2d.geometria;
import javax.swing.*;
@SuppressWarnings("serial")
public class TestePaintBrush extends JFrame {
public static void main(String[] args) {
new TestePaintBrush();
}
TestePaintBrush() {
PaintBrush paint = new PaintBrush();
getContentPane().add(paint);
setSize(800, 600);
setVisible(true);
}
}
Atividades
• Adicione as seguintes opções ao Paint.
– Combobox com as cores azul, branco e
verde para o ponto desenhado e para o
fundo de tela.
– Borracha.
– Opção de criar uma linha arrastando o
mouse clicado sobre a tela.
Atividades
• Recrie o jogo snake.
Download

Combobox com as cores azul, branco e verde para o