Transcript Chapter 16 (Graphics - Dalton State College
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?
y
(0, 0)
x
x-axis (x, y) Java Coordinate System y-axis (0, 0) 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 public void paint(Graphics g) Graphics object 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 window in JFrame 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
(0,0) (x, y) → String goes here (0, getHeight()) drawString(String s, int x, int y); (getWidth(),0) (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
(0,0) (x1, y1) (x2, y2) (0, getHeight()) drawLine(int x1, int y1, int x2, int y2); (getWidth(),0) (getWidth(),getHeight())
drawRect() method
Draw outline of rectangle
fillRect() method
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); (x,y) aw/2 ah/2 h w
(x,y)
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); 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 y coordinate 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[3], y[3]) (x[4], y[4]) (x[2], y[2]) (x[1], y[1])
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
Amount of space between baselines
Ascent
Height of uppercase character from baseline to top of character
Descent
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 int getLeading() public int getAscent() public int getDescent() public int getHeight()
stringWidth() method
Returns integer width of a String Requires name of String Member of FontMetrics class getHeight() getLeading() getAscent() getDescent()