/*PaintTexture01.java 12/12/99
Copyright 1999, R.G.Baldwin
Illustrates use of a TexturePaint object to fill a
relatively large circle with small tiled instances of a
BufferedImage object.
The BufferedImage object has a red filled circle on
a square green background.
Uses code to create the BufferedImage object to
avoid the need to provide an auxiliary image file.
Draws a 4-inch by 4-inch Frame on the screen.
Translates the origin to the center of the Frame.
Draws a pair of X and Y-axes centered on the new
origin.
Fills a 2-inch diameter circle with small tiled
versions of the BufferedImage object.
Draws the filled 2-inch diameter circle on the
Frame, centered on the origin.
Whether the dimensions in inches come out right
or not depends on whether the method
getScreenResolution() returns the correct
resolution for your screen.
Tested using JDK 1.2.2, WinNT Workstation 4.0
*****************************************/
import java.awt.geom.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;
class PaintTexture01{
publicstaticvoid main(String[] args){
GUI guiObj = new GUI();
}//end main
}//end controlling class PaintTexture01
class GUI extends Frame{
int res;//store screen resolution here
staticfinalint ds = 72;//default scale, 72 units/inch
staticfinalint hSize = 4;//horizonal size = 4 inches
staticfinalint vSize = 4;//vertical size = 4 inches
GUI(){//constructor
//Get screen resolution
res = Toolkit.getDefaultToolkit().
getScreenResolution();
//Set Frame size
this.setSize(hSize*res,vSize*res);
this.setVisible(true);
this.setTitle("Copyright 1999, R.G.Baldwin");
//Window listener to terminate program.
this.addWindowListener(new WindowAdapter(){
publicvoid windowClosing(WindowEvent e){
System.exit(0);}});
}//end constructor
//-----------------------------------------------------//
//Override the paint() method
publicvoid paint(Graphics g){
//Downcast the Graphics object to a
// Graphics2D object
Graphics2D g2 = (Graphics2D)g;
//Scale device space to produce inches on the
// screen based on actual screen resolution.
g2.scale((double)res/72,(double)res/72);
//Translate origin to center of Frame
g2.translate((hSize/2)*ds,(vSize/2)*ds);
//Draw x-axis
g2.draw(new Line2D.Double(
-1.5*ds,0.0,1.5*ds,0.0));
//Draw y-axis
g2.draw(new Line2D.Double(
0.0,-1.5*ds,0.0,1.5*ds));
//Instantiate the main Shape object which is a
// circle
Ellipse2D.Double theMainCircle =
new Ellipse2D.Double(
-1.0*ds,-1.0*ds,2.0*ds,2.0*ds);
double tileSize = 0.25;//size of tiles in the fill
//Instantiate the anchor rectangle. This
// determines the size of the tiles containing the
// BufferedImage when the circle is filled.
Rectangle2D.Double anchor =
new Rectangle2D.Double(
0,0,(int)(tileSize*ds),
(int)(tileSize*ds));
//Instantiate the TexturePaint object and
// populate it with a BufferedImage object.
TexturePaint theTexturePaintObj =
new TexturePaint(getBufferedImage(),anchor);
g2.setPaint(theTexturePaintObj);//set fill object
g2.fill(theMainCircle);//do the fill
g2.draw(theMainCircle);//draw the filled circle
}//end overridden paint()
//-----------------------------------------------------//
//Method to create and return a BufferedImage
// object
//Returns a BufferedImage consisting of a filled
// red circle on a green square background.
BufferedImage getBufferedImage(){
//Larger images produce better quality.
double imageSize = 10.0;
BufferedImage theBufferedImage =
(BufferedImage)this.createImage(
(int)(imageSize*ds),
(int)(imageSize*ds));
//Get a Graphics2D context on the
// BufferedImage object
Graphics2D g2dImage =
theBufferedImage.createGraphics();
//Draw a rectangle on the Graphics2d context
// on the BufferedImage and fill it with the color
// green.
Rectangle2D.Double theRectangle =
new Rectangle2D.Double(
0.0,0.0,imageSize*ds,
imageSize*ds);
g2dImage.setPaint(new Color(0,255,0));
g2dImage.fill(theRectangle);
g2dImage.draw(theRectangle);
//Draw a circle on the Graphics2d context on the
// BufferedImage and fill it with the color red.
// This circle will cover the green rectangle.
Ellipse2D.Double circleOntheBufferedImage =
new Ellipse2D.Double(
0.0,0.0,imageSize*ds,
imageSize*ds);
g2dImage.setPaint(new Color(255,0,0));//red
g2dImage.fill(circleOntheBufferedImage);
g2dImage.draw(circleOntheBufferedImage);
return theBufferedImage;
}//end getBuffered Image
}//end class GUI
//===============================//
Figure 14
|