**********************
BetterCircleTest.java
**********************
import java.awt.*;
import java.applet.Applet;
/** Position circles down the diagonal so that their borders
* just touch. Illustrates that Java 1.1 lightweight
* components can be partially transparent.
*
*/
public class BetterCircleTest extends Applet {
public void init() {
setBackground(Color.lightGray);
setLayout(null);
BetterCircle circle;
int radius = getSize().width/6;
int deltaX = round(2.0 * (double)radius / Math.sqrt(2.0));
for (int x=radius; x<6*radius; x=x+deltaX) {
circle = new BetterCircle(Color.black, radius);
add(circle);
circle.setCenter(x, x);
}
}
private int round(double num) {
return((int)Math.round(num));
}
}
********************************
BetterCircle.java
********************************
import java.awt.*;
/** An improved variation of the Circle class that uses Java 1.1
* lightweight components instead of Canvas.
*
*/
public class BetterCircle extends Component {
private Dimension preferredDimension;
private int width, height;
public BetterCircle(Color foreground, int radius) {
setForeground(foreground);
width = 2*radius;
height = 2*radius;
preferredDimension = new Dimension(width, height);
setSize(preferredDimension);
}
public void paint(Graphics g) {
g.setColor(getForeground());
g.fillOval(0, 0, width, height);
}
public void setCenter(int x, int y) {
setLocation(x - width/2, y - height/2);
}
/** Report the original size as the preferred size.
* That way, the BetterCircle doesn't get
* shrunk by layout managers.
*/
public Dimension getPreferredSize() {
return(preferredDimension);
}
/** Report same thing for minimum size as
* preferred size.
*/
public Dimension getMinimumSize() {
return(preferredDimension);
}
}
*******************************