/*Shape03.java 12/12/99 Copyright 1999, R.G.Baldwin Illustrates use of the Shape interface. 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. Draws a black circle on the screen with a diameter of one inch centered at the origin. Gets the bounding box for the circle and draws it in red. Draws a one-half inch green square completely inside of the circle. Draws a one-half inch blue square partial inside and partially outside the circle. Draws a one-half magenta square completely outside the circle. Tests the bounding box and the three one-half inch squares to determine if they are contained in the circle. Displays the results on the command-line screen. Tests the bounding box and the three one-half inch squares to determine if they intersect the circle. Displays the results on the command-line screen. The program produces the following output: theCircle contains theBoundingBox: false theCircle contains theInsideBox: true theCircle contains theIntersectingBox: false theCircle contains theOutsideBox: false theCircle intersects theBoundingBox: true theCircle intersects theInsideBox: true theCircle intersects theIntersectingBox: true theCircle intersects theOutsideBox: false Tested using JDK 1.2.2 under WinNT Workstation 4.0 **************************************/ import java.awt.geom.*; import java.awt.*; import java.awt.event.*; class Shape03{ publicstaticvoid main(String[] args){ GUI guiObj = new GUI(); }//end main }//end controlling class Shape03 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)); //Define a one-inch diameter circle centered about // its origin. Note that Ellipse2D implements Shape Ellipse2D.Double theCircle = new Ellipse2D.Double(-0.5*ds, -0.5*ds, 1.0*ds, 1.0*ds); //Draw theCircle in the Frame in the default // drawing color, black g2.draw(theCircle); //Get bounding box of theCircle Rectangle2D theBoundingBox = theCircle.getBounds2D(); g2.setColor(Color.red);//change the drawing color //Draw the bounding box in the new color g2.draw(theBoundingBox); //Create boxes to test for contains and intersects Rectangle2D.Double theInsideBox = new Rectangle2D.Double(-0.25*ds, -0.25*ds, 0.5*ds, 0.5*ds); Rectangle2D.Double theIntersectingBox = new Rectangle2D.Double(0.3*ds, 0.3*ds, 0.5*ds, 0.5*ds); Rectangle2D.Double theOutsideBox = new Rectangle2D.Double(-1.25*ds, -1.25*ds, 0.5*ds, 0.5*ds); //Draw the test boxes in new colors g2.setColor(Color.green); g2.draw(theInsideBox);//theInsideBox is green g2.setColor(Color.blue); g2.draw(theIntersectingBox);//theIntersectingBox blue g2.setColor(Color.magenta); g2.draw(theOutsideBox);//theOutsideBox is magenta //Now perform the tests and display the results // on the command-line screen. System.out.println( "theCircle contains theBoundingBox: " + theCircle.contains(theBoundingBox)); System.out.println("theCircle contains theInsideBox: " + theCircle.contains(theInsideBox)); System.out.println( "theCircle contains theIntersectingBox: " + theCircle.contains(theIntersectingBox)); System.out.println("theCircle contains theOutsideBox: " + theCircle.contains(theOutsideBox)); System.out.println();//blank line System.out.println( "theCircle intersects theBoundingBox: " + theCircle.intersects(theBoundingBox)); System.out.println( "theCircle intersects theInsideBox: " + theCircle.intersects(theInsideBox)); System.out.println( "theCircle intersects theIntersectingBox: " + theCircle.intersects(theIntersectingBox)); System.out.println( "theCircle intersects theOutsideBox: " + theCircle.intersects(theOutsideBox)); }//end overridden paint() }//end class GUI //=================================// Figure 12 |