Java 2D Marco Antonio. Java2D Conjunto de classes para trabalhar com gráficos e imagens. A...
Transcript of Java 2D Marco Antonio. Java2D Conjunto de classes para trabalhar com gráficos e imagens. A...
Java 2DMarco 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.
ComponenteGeometricopackage 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); } }}
TelaDeTestepackage 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;
}
TesteMovimentacaoCompGeopackage 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);
repaint();
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) {
new TesteMovimentacaoCompGeo().movimentaComponente();
}
}
TelaDeTestepackage 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(); }}
Circulopackage 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); }
}
TesteCirculopackage 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); // }}
Retangulopackage 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); }}
TesteRetangulopackage 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(); }}
CirculoListenerpackage 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) { }}
TesteCirculoListenerpackage 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); // }}
PaintBrushpackage 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}}
TestePaintBrushpackage 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.