/*Composite03.java 12/12/99
Copyright 1999, R.G.Baldwin
Illustrates use of the constructors of the Color class
to achieve transparency with solid-fill colors.
Similar to Composite01 except that Composite01
uses the AlphaComposite class to achieve
transparency.
Draws a 4-inch by 4-inch Frame on the screen.
Translates the orgin to the center of the Frame.
Draws a pair of X and Y-axes centered on the new
origin.
Draws a big circle centered on the origin underneath
all of the ellipses.
Uses rotation and translation to fill three ellipses in
each of the four quadrants. The ellipses intersect at
their center. Each is rotated by 60 degrees relative
to the one below it. The order is:
Red ellipse on the bottom
Green ellipse in the middle
Blue ellipse on the top
Each ellipse has a non-transparent outline,
approximately 0.05 inches in width.
TRANSPARENCY
Upper-left quadrant
No transparency
Upper-right quadrant
All three ellipses are 30-percent transparent
Lower-left quadrant
All three ellipses are 60-percent transparent
Lower-right quadrant
All three ellipses are 90-percent transparent
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 under WinNT Workstation 4.0
******************************************/
import java.awt.geom.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;
class Composite03{
publicstaticvoid main(String[] args){
GUI guiObj = new GUI();
}//end main
}//end controlling class Composite03
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(){
public void windowClosing(WindowEvent e){
System.exit(0);}});
}//end constructor
//-----------------------------------------------------//
//Override the paint() method
public void 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));
//Draw a big circle underneath all of the ellipses.
g2.setStroke(new BasicStroke(0.1f*ds));
Ellipse2D.Double bigCircle = new Ellipse2D.Double(
-1.5*ds,-1.5*ds,3.0*ds,3.0*ds);
g2.draw(bigCircle);
Ellipse2D.Double theEllipse;
g2.setStroke(new BasicStroke(0.05f*ds));
//Translate origin to upper-left quadrant
g2.translate(-1.0*ds,-1.0*ds);
//Red horizontal ellipse
theEllipse = new Ellipse2D.Double(
-1.0*ds,-0.25*ds,2.0*ds,0.5*ds);
g2.setPaint(Color.red);//nontransparent outline
g2.draw(theEllipse);
g2.setPaint(new Color(
1.0f,0.0f,0.0f,1.0f));//red, not transparent
g2.fill(theEllipse);
//Green ellipse at 60 degrees
theEllipse = new Ellipse2D.Double(
-1.0*ds,-0.25*ds,2.0*ds,0.5*ds);
g2.rotate(Math.PI/3.0);//rotate 60 degrees
g2.setPaint(Color.green);//nontransparent outline
g2.draw(theEllipse);
g2.setPaint(Color.green);//nontransparent outline
g2.draw(theEllipse);
g2.setPaint(new Color(
0.0f,1.0f,0.0f,1.0f));//green, not transparent
g2.fill(theEllipse);
//Blue ellipse at 120 degrees
theEllipse = new Ellipse2D.Double(
-1.0*ds,-0.25*ds,2.0*ds,0.5*ds);
g2.rotate((Math.PI/3.0));//rotate 60 more degrees
g2.setPaint(Color.blue);//nontransparent outline
g2.draw(theEllipse);
g2.setPaint(new Color(
0.0f,0.0f,1.0f,1.0f));//blue, not transparent
g2.fill(theEllipse);
//Translate origin to upper-right quadrant
g2.rotate(-2*(Math.PI/3.0));//undo prev rotation
g2.translate(2.0*ds,0.0*ds);
//Red horizontal ellipse
theEllipse = new Ellipse2D.Double(
-1.0*ds,-0.25*ds,2.0*ds,0.5*ds);
g2.setPaint(Color.red);//nontransparent outline
g2.draw(theEllipse);
g2.setPaint(new Color(
1.0f,0.0f,0.0f,0.7f));//red, 30% transparent
g2.fill(theEllipse);
//Green ellipse at 60 degrees
theEllipse = new Ellipse2D.Double(
-1.0*ds,-0.25*ds,2.0*ds,0.5*ds);
g2.rotate(Math.PI/3.0);//rotate 60 degrees
g2.setPaint(Color.green);//nontransparent outline
g2.draw(theEllipse);
g2.setPaint(new Color(
0.0f,1.0f,0.0f,0.7f));//green,30% transparent
g2.fill(theEllipse);
//Blue ellipse at 120 degrees
theEllipse = new Ellipse2D.Double(
-1.0*ds,-0.25*ds,2.0*ds,0.5*ds);
g2.rotate((Math.PI/3.0));//rotate 60 more degrees
g2.setPaint(Color.blue);//nontransparent outline
g2.draw(theEllipse);
g2.setPaint(new Color(
0.0f,0.0f,1.0f,0.7f));//blue, 30% transparent
g2.fill(theEllipse);
//Translate origin to lower-left quadrant
g2.rotate(-2*(Math.PI/3.0));//undo prev rotation
g2.translate(-2.0*ds,2.0*ds);
//Red horizontal ellipse
theEllipse = new Ellipse2D.Double(
-1.0*ds,-0.25*ds,2.0*ds,0.5*ds);
g2.setPaint(Color.red);//nontransparent outline
g2.draw(theEllipse);
g2.setPaint(new Color(
1.0f,0.0f,0.0f,0.4f));//red, 60% transparent
g2.fill(theEllipse);
//Green ellipse at 60 degrees
theEllipse = new Ellipse2D.Double(
-1.0*ds,-0.25*ds,2.0*ds,0.5*ds);
g2.rotate(Math.PI/3.0);//rotate 60 degrees
g2.setPaint(Color.green);//nontransparent outline
g2.draw(theEllipse);
g2.setPaint(new Color(
0.0f,1.0f,0.0f,0.4f));//green,60% transparent
g2.fill(theEllipse);
//Blue ellipse at 120 degrees
theEllipse = new Ellipse2D.Double(
-1.0*ds,-0.25*ds,2.0*ds,0.5*ds);
g2.rotate((Math.PI/3.0));//rotate 60 more degrees
g2.setPaint(Color.blue);//nontransparent outline
g2.draw(theEllipse);
g2.setPaint(new Color(
0.0f,0.0f,1.0f,0.4f));//blue, 60% transparent
g2.fill(theEllipse);
//Translate origin to lower-right quadrant
g2.rotate(-2*(Math.PI/3.0));//undo prev rotation
g2.translate(2.0*ds,0.0*ds);
//Red horizontal ellipse
theEllipse = new Ellipse2D.Double(
-1.0*ds,-0.25*ds,2.0*ds,0.5*ds);
g2.setPaint(Color.red);//nontransparent outline
g2.draw(theEllipse);
g2.setPaint(new Color(
1.0f,0.0f,0.0f,0.1f));//red, 90% transparent
g2.fill(theEllipse);
//Green ellipse at 60 degrees
theEllipse = new Ellipse2D.Double(
-1.0*ds,-0.25*ds,2.0*ds,0.5*ds);
g2.rotate(Math.PI/3.0);//rotate 60 degrees
g2.setPaint(Color.green);//nontransparent outline
g2.draw(theEllipse);
g2.setPaint(new Color(
0.0f,1.0f,0.0f,0.1f));//green,90% transparent
g2.fill(theEllipse);
//Blue ellipse at 120 degrees
theEllipse = new Ellipse2D.Double(
-1.0*ds,-0.25*ds,2.0*ds,0.5*ds);
g2.rotate((Math.PI/3.0));//rotate 60 more degrees
g2.setPaint(Color.blue);//nontransparent outline
g2.draw(theEllipse);
g2.setPaint(new Color(
0.0f,0.0f,1.0f,0.1f));//blue, 90% transparent
g2.fill(theEllipse);
}//end overridden paint()
}//end class GUI
//================================//
Figure 7
|