Chapter 16 (Graphics - Dalton State College

advertisement
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()
Download