Graphics Chapter 16 If you want to draw shapes such as a bar chart, a clock, or a stop sign, how do you do it? x x-axis (0, 0) (0, 0) y (x, y) y-axis Java Coordinate System Conventional Coordinate System A rectangular area Part of a user interface Called a frame Contains title bar Cannot draw directly on JFrame object This is a container Contains other objects Create a panel upon which to draw Drawing Strings Drawing Lines Drawing Rectangles Drawing Ovals Drawing Arcs Drawing Polygons paint() method Write own method to override default Method header Graphics object public void paint(Graphics g) Preconfigured with the appropriate state for drawing on the component repaint() method Use when window needs to be updated Calls paint() method Creates Graphics object drawString() method Draw String in JFrame window Requires three arguments String x-axis coordinate y-axis coordinate Member of Graphics class setFont() method Requires Font object Instruct Graphics object to use a font somegraphicsobject.setFont(someFont); setColor() method Designate Graphics color Use 13 Color class constants as arguments Create any Color object Color someColor = new Color(r, g, b); Values range from 0 to 255 setColor() method Designate Graphics color Use 13 Color class constants as arguments Create any Color object Color someColor = new Color(r, g, b); Values range from 0 to 255 (getWidth(),0) (0,0) (x, y) → String goes here (0, getHeight()) drawString(String s, int x, int y); (getWidth(),getHeight()) drawLine() method Draw straight line between any two points Takes four arguments x- and y-coordinates of line’s starting point x- and y-coordinates of the line’s ending point (getWidth(),0) (0,0) (x1, y1) (x2, y2) (0, getHeight()) drawLine(int x1, int y1, int x2, int y2); (getWidth(),getHeight()) drawRect() method fillRect() method Draw outline of rectangle Draw solid or filled rectangle Both require four arguments x- and y-coordinates of upper-left corner of rectangle Width and height of rectangle drawRect(int x, int y, int w, int h); fillRect(int x, int y, int w, int h); (x,y) (x,y) h h w w clearRect() method Draws rectangle Requires four arguments x- and y-coordinates of upper-left corner of rectangle Width and height of rectangle Appears empty or “clear” drawRoundRect() method Create rectangles with rounded corners Requires six arguments drawRoundRect(int x, int y, int w, int h, int aw, int ah); fillRoundRect(int x, int y, int w, int h, int aw, int ah); aw/2 (x,y) ah/2 h w drawOval() and fillOval() methods Draw ovals using the same four arguments that rectangles use drawOval(int x, int y, int w, int h); fillOval(int x, int y, int w, int h); (x,y) h w drawArc() method arguments x-coordinate of upper-left corner of imaginary rectangle that represents bounds of imaginary circle that contains arc y-coordinate of same point Width of imaginary rectangle that represents bounds of imaginary circle that contains arc Height of same imaginary rectangle Beginning arc position Arc angle fillArc() method Create solid arc drawArc(int x, int y, int w, int h, int angle1, int angle2); fillArc(int x, int y, int w, int h, int angle1, int angle2); (x,y) h w draw3DRect() method Minor variation on drawRect() method Draw rectangle that appears to have “shadowing” on two edges Contains Boolean value argument true if rectangle darker on right and bottom false if rectangle darker on left and top fill3DRect() method Create filled three-dimensional rectangles drawPolygon() method Draw complex shapes Requires three arguments Integer array holds series of x-coordinate positions Second array holds series of corresponding ycoordinate positions Number of pairs of points to connect fillPolygon() method Draw solid shape If beginning and ending points not identical Two endpoints connected by straight line before polygon filled with color addPoint() method Add points to polygon indefinitely int[] x = {40, 70, 60, 45, 20}; int[] y = {20, 40, 80, 45, 60}; g.drawPolygon(x, y, x.length); (x[0], y[0]) (x[1], y[1]) (x[3], y[3]) (x[4], y[4]) (x[2], y[2]) import java.awt.Graphics; import javax.swing.JPanel; public class DrawingPanel extends JPanel { public void paintComponent (Graphics g) { g.drawRect (50, 50, 20, 20); // square g.drawRect (100, 50, 40, 20); // rectangle g.drawOval (200, 50, 20, 20); // circle g.drawOval (250, 50, 40, 20); // oval g.drawString ("Square", 50, 90); g.drawString ("Rectangle", 100, 90); g.drawString ("Circle", 200, 90); g.drawString ("Oval", 250, 90); // continued on next slide g.fillRect (50, 100, 20, 20); // square g.fillRect (100, 100, 40, 20); // rectangle g.fillOval (200, 100, 20, 20); // circle g.fillOval (250, 100, 40, 20); // oval g.drawLine (50, 150, 300, 150); // line g.drawArc (50, 150, 250, 100, 0, 180); // arc g.fillArc (100, 175, 200, 75, 90, 45); // arc } // end paintComponent } // end DrawingPanel import javax.swing.JFrame; public class DrawingSamples { public static void main (String [ ] args) { JFrame aWindow = new JFrame (); aWindow.setSize (350, 300); // width x height aWindow.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE); aWindow.setTitle ("Samples of shapes we can draw"); DrawingPanel panel = new DrawingPanel (); aWindow.add (panel); aWindow.setVisible (true); } } You can display a string at any location in a panel. Can you display it centered? To do so, you need to use the FontMetrics class to measure the exact width and height of the string for a particular font. A FontMetrics can measure the following attributes: Leading Ascent Height of uppercase character from baseline to top of character Descent Amount of space between baselines Measures part of characters that “hang below” baseline Height of font Sum of leading, ascent, and descent getFontMetrics() method Discover font’s height Returns FontMetrics object Use FontMetrics class methods with object to return Font’s statistics public public public public int int int int getLeading() getAscent() getDescent() getHeight() stringWidth() method Returns integer width of a String Requires name of String Member of FontMetrics class getLeading() getHeight() getAscent() getDescent()