/*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 |