domingo, 9 de março de 2008

JAVA 2D

Comecei a estudar um pouco de JAVA2D, para ajudar nos estudos com JAVA e computação gráfica. Estudei algumas formas básicas, e os objetos principais para criar imagens com o Java (Graphics, Graphics2D, Component, Container, Panel, JComponent e etc).
O programa que segue neste post, é apenas uma pequena desmonstração da utlização do Java2d. Para este estudo fiz apenas um relógio que conta os segundos.
Neste programa, foram empregados os conceitos de rotação e utilizadas 2 formas básicas do java2d (Line2D e Ellipse2D)


package javagraphics;

import java.applet.Applet;
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.geom.Ellipse2D;
import java.awt.geom.Line2D;
import java.text.DecimalFormat;
import java.text.NumberFormat;

import javax.swing.Timer;

public class Relogio extends Applet {

Graphics2D g2d;
Point centro;
Point prop;
Line2D line;
int largura;
int altura;
int second;
TextField txt;
Container ct;
NumberFormat formatter = new DecimalFormat("00");

public void init ()
{
setSize(300,300);
setBackground(new Color(210,255,0));

ct = new Container();
ct.setLayout(new FlowLayout());

txt = new TextField(20);
ct.add(txt);
add(ct);
}

public void paint ( Graphics g )
{
second = 0;

g2d = (Graphics2D)g.create();
super.paint(g2d);

Dimension size = getSize();
centro = new Point(size.width / 2, size.height / 2);
prop = new Point((int)(centro.x * 0.3), (int)(centro.y * 0.3));

largura = (centro.x - prop.x)*2;
altura = (centro.y - prop.y)*2;

// fundo do relogio
g2d.setPaint(Color.lightGray);
g2d.fill( new Ellipse2D.Float(prop.x, prop.y, largura, altura) );

// ponteiro do segundo
line = new Line2D.Double(centro.x, centro.y, centro.x, prop.y / 0.7);

g2d.setPaint(Color.red);
g2d.setStroke(new BasicStroke(2.0f));
g2d.draw(line);

txt.setText("00");

int delay = 1000; //milliseconds
ActionListener taskPerformer = new ActionListener() {
public void actionPerformed(ActionEvent evt) {

g2d.rotate(Math.toRadians(6), centro.x, centro.y);

// fundo do relogio
g2d.setPaint(Color.lightGray);
g2d.fill( new Ellipse2D.Float(prop.x, prop.y, largura, altura) );

// ponteiro do segundo
g2d.setPaint(Color.red);
g2d.setStroke(new BasicStroke(2.0f));
g2d.draw(line);


second++;
txt.setText(formatter.format( (second == 60) ? 0 : second) );

second = (second == 60) ? 0 : second;
}
};
new Timer(delay, taskPerformer).start();

System.out.println(prop.y);
}

}


abaixo segue a imagem do programa em execução:

Nenhum comentário:

Postar um comentário