Spinner.java
package com.bozoid.cis370.hw07;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.awt.font.*;
import java.awt.geom.*; // for AffineTransform
/**
An Animator that displays a spinning text string.
*/
public class Spinner implements Animator
{
public Spinner(String msg,int fontsize)
{
this.msg = msg;
angle = 0.0;
xform = AffineTransform.getRotateInstance(0.0);
font = new Font("Serif",Font.PLAIN,fontsize);
}
public Spinner(String msg)
{
this(msg,72);
}
public Spinner()
{
this("Hello",144);
}
public void oneFrame(Component comp,Graphics g)
{
Rectangle2D bounds;
LineMetrics fmetrics;
FontRenderContext fcontext;
int w = comp.getWidth();
int h = comp.getHeight();
Graphics2D g2 = (Graphics2D)g;
g2.setFont(font);
fcontext = g2.getFontRenderContext();
comp.setBackground(Color.RED);
xform.setToTranslation(w/2.0,h/2.0);
xform.rotate(angle);
g2.setTransform(xform);
g2.setFont(font);
g2.setPaint(Color.PINK);
bounds = font.getStringBounds(msg,fcontext);
fmetrics = font.getLineMetrics(msg,fcontext);
g2.drawString(msg,
(float)(-bounds.getWidth()/2.0),
(float)(bounds.getHeight()/2.0));
angle = (angle + delta) % (2.0*Math.PI);
}
private String msg;
private AffineTransform xform = null;
private double angle = 0.0;
private double delta = 0.1; // angular velocity
private Font font = null;
}