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