Graphics and Java2D - PowerPoint PPT Presentation

jacob
graphics and java2d l.
Skip this Video
Loading SlideShow in 5 Seconds..
Graphics and Java2D PowerPoint Presentation
Download Presentation
Graphics and Java2D

play fullscreen
1 / 58
Download Presentation
Graphics and Java2D
459 Views
Download Presentation

Graphics and Java2D

- - - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript

  1. Graphics and Java2D Joe Komar Komar Associates

  2. Overview • Graphics contexts and graphics objects • Color control • Font control • Drawing lines, rectangles, ovals, arcs, polygons, and polylines • Java2D API • Java2D Shapes Komar Associates

  3. Graphics Coordinate System • 0,0 is the upper left corner • Each coordinate point represents one pixel • All coordinate values are positive x 0,0 X y x,y Y Komar Associates

  4. Coordinates Applet import java.awt.*; import java.applet.*; public class Coordinates extends Applet { public void paint (Graphics page){ setSize (300,200); page.drawRect (0, 0, 299, 199); page.drawLine (50, 50, 250, 100); page.drawString ("<50, 50>", 25, 45); page.drawString ("<250, 100>", 225, 115); }// method paint }// class Coordinates Komar Associates

  5. Output of Coordinates Applet Komar Associates

  6. Graphics • Graphics “context” enables drawing on the screen • Graphics object manages a graphics context • Graphics is an abstract class implemented on each platform • Component class is primary superclass for Applet and JApplet Komar Associates

  7. paint method of Component • Accepts a Graphics object • Must be overridden • When Applet runs, calls init, start, then paint methods • repaint method called by programmer, which calls the Component’s update then paint method Komar Associates

  8. Colors • Color class is part of java.awt • Colors are defined by a mixture of Red, Blue, and Green • RGB • defined by three numbers ranging from (0,0,0) for black to (255,255,255) for white • over 16 million colors available • many systems cannot distinguish among so many colors • Predefined colors (final static Color objects) • e.g., Color.blue, Color.green, Color.cyan Komar Associates

  9. Defining Colors • Color (int red, int green, int blue) • Integer values between 0 and 255 • Color (float red, float green, float blue) • Decimal values between 0.0 and 1.0 • Color (int rgb) • bits 0-7 represent blue, 8-15 represent green, 16-23 represent red Komar Associates

  10. Defining Colors • Color brown = new Color (107, 69, 38); • brown.getBlue() returns 38 (getRed and getGreen) • brown.brighter() • returns a bit brighter Color • brown.darker() • returns a bit darker Color Komar Associates

  11. Nature Applet import java.awt.*; import java.applet.*; public class Nature extends Applet { public void paint (Graphics page) { setBackground (Color.darkGray); page.setColor (Color.red); page.drawRect (10, 15, 125, 85); page.setColor (Color.green); page.drawString ("Nature's first green", 25,45); page.setColor (Color.yellow); page.drawString ("is gold", 50, 75); }// method paint }// class Nature Komar Associates

  12. Nature Applet Results Komar Associates

  13. ShowColors Example // Fig. 11.5: ShowColors.java // Demonstrating Colors import java.awt.*; import javax.swing.*; import java.awt.event.*; public class ShowColors extends JFrame { public ShowColors() { super( "Using colors" ); setSize( 400, 130 ); show(); } Komar Associates

  14. ShowColors Example public void paint( Graphics g ) { // set new drawing color using integers g.setColor( new Color( 255, 0, 0 ) ); g.fillRect( 25, 25, 100, 20 ); g.drawString( "Current RGB: " + g.getColor(), 130, 40 ); // set new drawing color using floats g.setColor( new Color( 0.0f, 1.0f, 0.0f ) ); g.fillRect( 25, 50, 100, 20 ); g.drawString( "Current RGB: " + g.getColor(), 130, 65 ); // set new drawing color using static Color objects g.setColor( Color.blue ); g.fillRect( 25, 75, 100, 20 ); g.drawString( "Current RGB: " + g.getColor(), 130, 90 ); Komar Associates

  15. ShowColors Example // display individual RGB values Color c = Color.magenta; g.setColor( c ); g.fillRect( 25, 100, 100, 20 ); g.drawString( "RGB values: " + c.getRed() + ", " + c.getGreen() + ", " + c.getBlue(), 130, 115 ); } Komar Associates

  16. ShowColors Example public static void main( String args[] ) { ShowColors app = new ShowColors(); app.addWindowListener( new WindowAdapter() { public void windowClosing( WindowEvent e ) { System.exit( 0 ); } } ); } } Komar Associates

  17. ShowColors Example Komar Associates

  18. JColorChooser Dialog Box • static method showDialog of class JColorChooser presents dialog • Can choose by color swatch; hue, saturation and brightness (HSB); or by red, green, blue (RGB) • Returns the Color object chosen • See example run... Komar Associates

  19. Fonts • Uses currently supported fonts on the system • Constructor takes String font-name, int style, int size • Styles - Font.PLAIN, Font.BOLD, Font.ITALIC • Size is number of points (1/72nd of an inch) Komar Associates

  20. Fonts Example // Fig. 11.9: Fonts.java // Using fonts import java.awt.*; import javax.swing.*; import java.awt.event.*; public class Fonts extends JFrame { public Fonts() { super( "Using fonts" ); setSize( 420, 125 ); show(); } Komar Associates

  21. Fonts Example public void paint( Graphics g ) { // set current font to Serif (Times), bold, 12pt // and draw a string g.setFont( new Font( "Serif", Font.BOLD, 12 ) ); g.drawString( "Serif 12 point bold.", 20, 50 ); // set current font to Monospaced (Courier), // italic, 24pt and draw a string g.setFont( new Font( "Monospaced", Font.ITALIC, 24 ) ); g.drawString( "Monospaced 24 point italic.", 20, 70 ); // set current font to SansSerif (Helvetica), // plain, 14pt and draw a string g.setFont( new Font( "SansSerif", Font.PLAIN, 14 ) ); g.drawString( "SansSerif 14 point plain.", 20, 90 ); Komar Associates

  22. Fonts Example // set current font to Serif (times), bold/italic, // 18pt and draw a string g.setColor( Color.red ); g.setFont( new Font( "Serif", Font.BOLD + Font.ITALIC, 18 ) ); g.drawString( g.getFont().getName() + " " + g.getFont().getSize() + " point bold italic.", 20, 110 ); } Komar Associates

  23. Fonts Example public static void main( String args[] ) { Fonts app = new Fonts(); app.addWindowListener( new WindowAdapter() { public void windowClosing( WindowEvent e ) { System.exit( 0 ); } } ); } } Komar Associates

  24. Fonts Example Komar Associates

  25. Font Metrics • Height -- total size • Ascent -- basic character size • Leading -- above character • Descent -- below character • Methods to get these as well as getFontMetrics to return a FontMetrics object Komar Associates

  26. Drawing Shapes • Lines, ovals, rectangles, arcs, polygons, and polylines • circle is a specific kind of oval • square is a specific kind of rectangle • polygons include any many-sided shapes • polylines are lines connected end-to-end • Most shapes can be drawn filled or unfilled • e.g. drawOval versus fillOval Komar Associates

  27. Ovals • drawOval (int x, int y, int width, int height) • fillOval (int x, int y, int width, int height) width height Komar Associates

  28. Ovals as Spinning Disk import java.awt.*; import java.applet.*; public class Rotating_Disk extends Applet { public void paint (Graphics page) { int width = 0, height = 40; int x = 100, y = 100, warp = 1; page.setXORMode (getBackground()); for (int change = 1; change < 1000; change++) { width += warp * 2; x -= warp; if (width == 0 || width == 40) warp *= -1; page.fillOval (x, y, width, height); for (int pause = 1; pause <= 500000; pause++); page.fillOval (x, y, width, height); }// for loop }// method paint }// class Rotating_Disk Komar Associates

  29. Spinning Disk In Action Rotating Disk Applet Komar Associates

  30. Rectangles • drawRect (int x, int y, int width, int height) • fillRect (int x, int y, int width, int height) • clearRect (int x, int y, int width, int height) • drawRoundRect (int x, int y, int width, int height, int arc_width, int arc_height) • fillRoundRect (int x, int y, int width, int height, int arc_width, int arc_height) • draw3DRect (int x, int y, int width, int height, boolean raised) • draw3DRect (int x, int y, int width, int height, boolean raised) Komar Associates

  31. Rounded and 3D Rectangles import java.awt.*; import java.applet.*; public class Rectangles extends Applet { public void paint (Graphics page) { page.drawRoundRect (10,10,50,50,25,25); page.setColor (Color.red); page.fillRoundRect (90,10,40,40,10,30); page.setColor (Color.blue); page.fillRoundRect (150,30,50,20,15,15); page.setColor (Color.orange); page.fill3DRect (10,70,50,50,true); page.draw3DRect (70,70,50,50,false); }// method paint }// class Rectangles Komar Associates

  32. Rectangle Results Komar Associates

  33. Arc Angle Start Angle height Width Arcs • drawArc (int x, int y, int width, int height, int start_angle, int arc_angle) • fillArc (int x, int y, int width, int height, int start_angle, int arc_angle) Komar Associates

  34. Arcs Applet import java.awt.*; import java.applet.*; public class Arcs extends Applet { public void paint (Graphics page) { page.drawArc (10,10,50,50,45,225); page.drawArc (70,10,30,70,-180,180); page.setColor (Color.red); page.fillArc (130,10,60,60,-180,-90); page.setColor (Color.blue); page.fillArc (190,10,50,50,45,270); page.setColor (Color.green); page.fillArc (250,10,80,40,-225,180); }// method paint }// Class Arcs Komar Associates

  35. Arcs Applet Results Komar Associates

  36. Polygons • Polygon class can be used to define a polygon • addPoint method adds points to the polygon • Graphics class contains methods to draw a polygon • drawPolygon(int[ ] xpoints, int[ ] ypoints, int numpoints) • drawPolygon(Polygon poly) • fillPolygon(int[ ] xpoints, int[ ] ypoints, int numpoints) • fillPolygon(Polygon poly) • Polygons are always closed shapes -- if the last point specified does not close the shape, it is automatically closed Komar Associates

  37. Polygons Applet import java.awt.*; import java.applet.*; public class Polygons extends Applet { private int[] xset1 = {110,110,115,120,150,135}; private int[] yset1 = {10,40,30,50,15,7}; private int[] xset2 = {195,170,170,195,220,220}; private int[] yset2 = {10,20,40,50,40,20}; private int[] xset3 = {110,150,110,150,110}; private int[] yset3 = {70,70,110,110,70}; private Polygon poly = new Polygon(); Komar Associates

  38. Polygons Applet public void paint (Graphics page) { page.drawPolygon (xset1, yset1, 6); page.drawPolygon (xset2, yset2, 6); page.setColor (Color.red); page.fillPolygon (xset3, yset3, 5); poly.addPoint (170, 70); poly.addPoint (170, 90); poly.addPoint (190, 110); poly.addPoint (220, 90); page.setColor (Color.blue); page.fillPolygon (poly); }// method paint }// class Polygons Komar Associates

  39. Polygons Applet Results Komar Associates

  40. Polylines • drawPolyline (int[ ] xpoints, int[ ] ypoints, int numpoints) • Similar to polygon except a polyline is not a closed shape Komar Associates

  41. Java2D API • Additional drawing capabilities beyond first java.awt release • Use Graphics2D objects • Graphics2D is a subclass of Graphics • Downcast Graphics object to Graphics2D object • Graphics2D g2 = (Graphics2D) g; • Use setPaint, draw, fill methods of Graphics2D Komar Associates

  42. Graphics2D Example // Fig. 11.22: Shapes.java // Demonstrating some Java2D shapes import javax.swing.*; import java.awt.event.*; import java.awt.*; import java.awt.geom.*; import java.awt.image.*; public class Shapes extends JFrame { public Shapes() { super( "Drawing 2D shapes" ); setSize( 425, 160 ); show(); } Komar Associates

  43. Graphics2D Example public void paint( Graphics g ) { // create 2D by casting g to Graphics2D Graphics2D g2d = ( Graphics2D ) g; // draw 2D ellipse filled with a blue-yellow gradient g2d.setPaint( new GradientPaint( 5, 30, // x1, y1 Color.blue, // initial Color 35, 100, // x2, y2 Color.yellow, // end Color true ) ); // cyclic g2d.fill( new Ellipse2D.Double( 5, 30, 65, 100 ) ); Komar Associates

  44. Graphics2D Example // draw 2D rectangle in red g2d.setPaint( Color.red ); g2d.setStroke( new BasicStroke( 10.0f ) ); g2d.draw( new Rectangle2D.Double( 80, 30, 65, 100 ) ); Komar Associates

  45. Graphics2D Example // draw 2D rounded rectangle with a buffered background BufferedImage buffImage = new BufferedImage( 10, 10, BufferedImage.TYPE_INT_RGB ); Graphics2D gg = buffImage.createGraphics(); gg.setColor( Color.yellow ); // draw in yellow gg.fillRect( 0, 0, 10, 10 ); // draw a filled rectangle gg.setColor( Color.black ); // draw in black gg.drawRect( 1, 1, 6, 6 ); // draw a rectangle gg.setColor( Color.blue ); // draw in blue gg.fillRect( 1, 1, 3, 3 ); // draw a filled rectangle gg.setColor( Color.red ); // draw in red gg.fillRect( 4, 4, 3, 3 ); // draw a filled rectangle Komar Associates

  46. Graphics2D Example // paint buffImage onto the JFrame g2d.setPaint( new TexturePaint( buffImage, new Rectangle( 10, 10 ) ) ); g2d.fill( new RoundRectangle2D.Double( 155, 30, 75, 100, 50, 50 ) ); Komar Associates

  47. Graphics2D Example // draw 2D pie-shaped arc in white g2d.setPaint( Color.white ); g2d.setStroke( new BasicStroke( 6.0f ) ); g2d.draw( new Arc2D.Double( 240, 30, 75, 100, 0, 270, Arc2D.PIE ) ); Komar Associates

  48. Graphics2D Example // draw 2D lines in green and yellow g2d.setPaint( Color.green ); g2d.draw( new Line2D.Double( 395, 30, 320, 150 ) ); float dashes[] = { 10 }; g2d.setPaint( Color.yellow ); g2d.setStroke( new BasicStroke( 4, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND, 10, dashes, 0 ) ); g2d.draw( new Line2D.Double( 320, 30, 395, 150 ) ); } Komar Associates

  49. Graphics2D Example public static void main( String args[] ) { Shapes app = new Shapes(); app.addWindowListener( new WindowAdapter() { public void windowClosing( WindowEvent e ) { System.exit( 0 ); } } ); } } Komar Associates

  50. Graphics2D Example Komar Associates