Chapter 12 - Graphics and Java 2D: 2003 Prentice Hall, Inc. All Rights Reserved

Download as ppt, pdf, or txt
Download as ppt, pdf, or txt
You are on page 1of 61

1

Chapter 12 - Graphics and Java 2D


Outline
12.1 Introduction
12.2 Graphics Contexts and Graphics Objects
12.3 Color Control
12.4 Font Control
12.5 Drawing Lines, Rectangles and Ovals
12.6 Drawing Arcs
12.7 Drawing Polygons and Polylines
12.8 Java2D API
12.9 (Optional Case Study) Thinking About Objects: Designing
Interfaces with the UML

 2003 Prentice Hall, Inc. All rights reserved.


2

12.1 Introduction

• Java’s graphics capabilities


– Drawing 2D shapes
– Controlling colors
– Controlling fonts
• Java 2D API
– More sophisticated graphics capabilities
• Drawing custom 2D shapes
• Filling shapes with colors and patterns

 2003 Prentice Hall, Inc. All rights reserved.


Fig. 12.1 Classes and interfaces used in this chapter from Java’s original 3
graphics capabilities and from the Java2D API. [Note: Class Object appears
here because it is the superclass of the Java class hierarchy.]
Object
Color
Component
Font
FontMetrics
Graphics
Polygon

Classes and interfaces from the Java2D API that appear


in package java.awt
Graphics2D interface
java.awt.Paint
BasicStroke interface
java.awt.Shape
GradientPaint
TexturePaint interface
java.awt.Stroke
Classes from the Java2D API that appear in package
java.awt.geom
GeneralPath
Line2D
RectangularShape
Arc2D
Ellipse2D
Rectangle2D
RoundRectangle2D

 2003 Prentice Hall, Inc. All rights reserved.


4

12.1 Introduction

• Java’s coordinate system


– Scheme for identifying all points on screen
– Upper-left corner has coordinates (0,0)
– Coordinate point composed of x-coordinate and y-coordinate

 2003 Prentice Hall, Inc. All rights reserved.


Fig. 12.2 Java coordinate system. Units are 5

measured in pixels

+x
(0 , 0) X a xis

(x , y )

+y

Y a xis

 2003 Prentice Hall, Inc. All rights reserved.


6

12.2 Graphics Contexts and Graphics Objects

• Graphics context
– Enables drawing on screen
– Graphics object manages graphics context
• Controls how information is drawn
– Class Graphics is abstract
• Cannot be instantiated
• Contributes to Java’s portability
– Class Component method paint takes Graphics object
public void paint( Graphics g )
– Called through method repaint

 2003 Prentice Hall, Inc. All rights reserved.


7

12.3 Color Control

• Class Color
– Defines methods and constants for manipulating colors
– Colors are created from red, green and blue components
• RGB values

 2003 Prentice Hall, Inc. All rights reserved.


Fig. 12.3 Color constants and their RGB 8

values

Color constant Color RGB value


public final static Color ORANGE orange 255, 200, 0
public final static Color PINK pink 255, 175, 175
public final static Color CYAN cyan 0, 255, 255
public final static Color MAGENTA magenta 255, 0, 255
public final static Color YELLOW yellow 255, 255, 0
public final static Color BLACK black 0, 0, 0
public final static Color WHITE white 255, 255, 255
public final static Color GRAY gray 128, 128, 128
public final static Color LIGHT_GRAY light gray 192, 192, 192
public final static Color DARK_GRAY dark gray 64, 64, 64
public final static Color RED red 255, 0, 0
public final static Color GREEN green 0, 255, 0
public final static Color BLUE blue 0, 0, 255

 2003 Prentice Hall, Inc. All rights reserved.


Fig. 12.4 Color methods and color-related 9

Graphics methods
Method Description
Color constructors and methods

public Color( int r, int g, int b )


Creates a color based on red, green and blue components expressed as integers
from 0 to 255.
public Color( float r, float g, float b )
Creates a color based on red, green and blue components expressed as
floating-point values from 0.0 to 1.0.
public int getRed()
Returns a value between 0 and 255 representing the red content.
public int getGreen()
Returns a value between 0 and 255 representing the green content.
public int getBlue()
Returns a value between 0 and 255 representing the blue content.
Graphics methods for manipulating Colors

public Color getColor()


Returns a Color object representing the current color for the graphics
context.
public void setColor( Color c )
Sets the current color for drawing with the graphics context.

 2003 Prentice Hall, Inc. All rights reserved.


1 // Fig. 12.5: ShowColors.java Outline
2 // Demonstrating Colors.
3 import java.awt.*;
4 import javax.swing.*; ShowColors.java
5
6 public class ShowColors extends JFrame {
7 Line 18
8 // constructor sets window's title bar string and dimensions
9 public ShowColors() Line 24
10 {
11 super( "Using colors" );
12
Paint window when Line 25
13 setSize( 400, 130 ); application begins
14 setVisible( true ); execution Line 26
15 }
16
17 // draw rectangles and Strings in different colors
18 public void paint( Graphics g )
Method setColor
19 { sets color’s RGB value
20 // call superclass's paint method
21 super.paint( g );
22
Method fillRect creates filled
23 // set new drawing color using integers rectangle at specified coordinates
24 g.setColor( new Color( 255, 0, 0 ) ); using current RGB value
25 g.fillRect( 25, 25, 100, 20 );
26 g.drawString( "Current RGB: " + g.getColor(), 130, 40 );
27
Method drawString draws
colored text at specified coordinates

 2003 Prentice Hall, Inc.


All rights reserved.
28 // set new drawing color using floats Outline
29 g.setColor( new Color( 0.0f, 1.0f, 0.0f ) );
30 g.fillRect( 25, 50, 100, 20 );
31 g.drawString( "Current RGB: " + g.getColor(), 130, 65 ); ShowColors.java
32
33 // set new drawing color using static Color objects
34 g.setColor( Color.BLUE ); Lines 34-39
35 g.fillRect( 25, 75, 100, 20 );
36 g.drawString( "Current RGB: " + g.getColor(), 130, 90 );
37
38 // display individual RGB values Use constant in class Color
39 Color color = Color.MAGENTA;
to specify current color
40 g.setColor( color );
41 g.fillRect( 25, 100, 100, 20 );
42 g.drawString( "RGB values: " + color.getRed() + ", " +
43 color.getGreen() + ", " + color.getBlue(), 130, 115 );
44
45 } // end method paint
46
47 // execute application
48 public static void main( String args[] )
49 {
50 ShowColors application = new ShowColors();
51 application.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
52 }
53
54 } // end class ShowColors

 2003 Prentice Hall, Inc.


All rights reserved.
1 // Fig. 12.6: ShowColors2.java Outline
2 // Choosing colors with JColorChooser.
3 import java.awt.*;
4 import java.awt.event.*; ShowColors2.jav
5 import javax.swing.*;
6
a
7 public class ShowColors2 extends JFrame {
8 private JButton changeColorButton;
9 private Color color = Color.LIGHT_GRAY;
10 private Container container;
11
12 // set up GUI
13 public ShowColors2()
14 {
15 super( "Using JColorChooser" );
16
17 container = getContentPane();
18 container.setLayout( new FlowLayout() );
19
20 // set up changeColorButton and register its event handler
21 changeColorButton = new JButton( "Change Color" );
22 changeColorButton.addActionListener(
23

 2003 Prentice Hall, Inc.


All rights reserved.
24 new ActionListener() { // anonymous inner class Outline
25
26 // display JColorChooser when user clicks button JColorChooser allows
27 public void actionPerformed( ActionEvent event ) user to chooseShowColors2.jav
from among
28 { severalacolors
29 color = JColorChooser.showDialog(
30 ShowColors2.this, "Choose a color", color );
31 Line 29
32 // set default color, if no color is returned static method
33 if ( color == null )
showDialog Line displays
29
34 color = Color.LIGHT_GRAY;
35
the color chooser dialog
36 // change content pane's background color
37 container.setBackground( color );
38 }
39
40 } // end anonymous inner class
41
42 ); // end call to addActionListener
43
44 container.add( changeColorButton );
45
46 setSize( 400, 130 );
47 setVisible( true );
48
49 } // end ShowColor2 constructor
50

 2003 Prentice Hall, Inc.


All rights reserved.
51 // execute application Outline
52 public static void main( String args[] )
53 {
54 ShowColors2 application = new ShowColors2(); ShowColors2.jav
55 application.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
56 }
a
57
58 } // end class ShowColors2

 2003 Prentice Hall, Inc.


All rights reserved.
Outline

ShowColors2.jav
a

 2003 Prentice Hall, Inc.


All rights reserved.
16
Fig. 12.7 HSB and RGB tabs of the
JColorChooser dialog

 2003 Prentice Hall, Inc. All rights reserved.


17

12.4 Font Control

• Class Font
– Contains methods and constants for font control
– Font constructor takes three arguments
• Font name
– Monospaced, SansSerif, Serif, etc.
• Font style
– Font.PLAIN, Font.ITALIC and Font.BOLD
• Font size
– Measured in points (1/72 of inch)

 2003 Prentice Hall, Inc. All rights reserved.


18

Fig. 12.8 Font-related methods and constants


Method or constant Description
Font constants, constructors and methods for drawing polygons

public final static int PLAIN


A constant representing a plain font style.
public final static int BOLD
A constant representing a bold font style.
public final static int ITALIC
A constant representing an italic font style.
public Font( String name, int style, int size )
Creates a Font object with the specified font, style and size.
public int getStyle()
Returns an integer value indicating the current font style.
public int getSize()
Returns an integer value indicating the current font size.
public String getName()
Returns the current font name as a string.
public String getFamily()
Returns the font’s family name as a string.
public boolean isPlain()
Tests a font for a plain font style. Returns true if the font is plain.
public boolean isBold()
Tests a font for a bold font style. Returns true if the font is bold.
public boolean isItalic()
Tests a font for an italic font style. Returns true if the font is italic.

 2003 Prentice Hall, Inc. All rights reserved.


19

Fig. 12.8 Font-related methods and constants

Method or constant Description


Graphics methods for manipulating Fonts

public Font getFont()


Returns a Font object reference representing the current font.
public void setFont( Font f )
Sets the current font to the font, style and size specified by the Font
object reference f.

 2003 Prentice Hall, Inc. All rights reserved.


1 // Fig. 12.9: Fonts.java Outline
2 // Using fonts.
3 import java.awt.*;
4 import javax.swing.*; Fonts.java
5
6 public class Fonts extends JFrame {
7 Line 24
8 // set window's title bar and dimensions
9 public Fonts() Line 25
10 {
11 super( "Using fonts" );
12
13 setSize( 420, 125 );
14 setVisible( true );
15 }
16
17 // display Strings in different fonts and colors
18 public void paint( Graphics g )
19 {
20 // call superclass's paint method Method setFont sets current font
21 super.paint( g );
22
23 // set font to Serif (Times), bold, 12pt and draw a string
24 g.setFont( new Font( "Serif", Font.BOLD, 12 ) );
25 g.drawString( "Serif 12 point bold.", 20, 50 ); Draw text using current font

 2003 Prentice Hall, Inc.


All rights reserved.
26 Outline
27 // set font to Monospaced (Courier), italic, 24pt and draw a string
28 g.setFont( new Font( "Monospaced", Font.ITALIC, 24 ) );
29 g.drawString( "Monospaced 24 point italic.", 20, 70 ); Fonts.java
30
31 // set font to SansSerif (Helvetica), plain, 14pt and draw a string
32 g.setFont( new Font( "SansSerif", Font.PLAIN, 14 ) ); Line 32
33 g.drawString( "SansSerif 14 point plain.", 20, 90 );
34 Line 37
35 // set font to Serif (Times), bold/italic, 18pt and draw Set font to SansSerif
a string 14-point plain
36 g.setColor( Color.RED );
37 g.setFont( new Font( "Serif", Font.BOLD + Font.ITALIC, 18 ) );
38 g.drawString( g.getFont().getName() + " " + g.getFont().getSize() +
39 " point bold italic.", 20, 110 );
40 Set font to Serif 18-point bold italic
41 } // end method paint
42
43 // execute application
44 public static void main( String args[] )
45 {
46 Fonts application = new Fonts();
47 application.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
48 }
49
50 } // end class Fonts

 2003 Prentice Hall, Inc.


All rights reserved.
22

12.4 Font Control

• Font metrics
– Height
– Descent (amount character dips below baseline)
– Ascent (amount character rises above baseline)
– Leading (difference between descent and ascent)

 2003 Prentice Hall, Inc. All rights reserved.


23

Fig. 12.10 Font metrics

Xy1Õ
le a d in g

h e ig h t a sc e n t

b a se lin e
de sc e nt

 2003 Prentice Hall, Inc. All rights reserved.


Fig. 12.11 FontMetrics and Graphics 24

methods for obtaining font metrics

Method Description
FontMetrics methods

public int getAscent()


Returns a value representing the ascent of a font in points.
public int getDescent()
Returns a value representing the descent of a font in points.
public int getLeading()
Returns a value representing the leading of a font in points.
public int getHeight()
Returns a value representing the height of a font in points.
Graphics methods for getting a Font’s FontMetrics

public FontMetrics getFontMetrics()


Returns the FontMetrics object for the current drawing Font.
public FontMetrics getFontMetrics( Font f )
Returns the FontMetrics object for the specified Font argument.

 2003 Prentice Hall, Inc. All rights reserved.


1 // Fig. 12.12: Metrics.java Outline
2 // FontMetrics and Graphics methods useful for obtaining font metrics.
3 import java.awt.*;
4 import javax.swing.*; Metrics.java
5
6 public class Metrics extends JFrame {
7 Line 22
8 // set window's title bar String and dimensions
9 public Metrics() Line 23
10 {
11 super( "Demonstrating FontMetrics" );
12
13 setSize( 510, 210 );
14 setVisible( true );
15 }
16
17 // display font metrics
18 public void paint( Graphics g ) Set font to SansSerif 12-point bold
19 {
20 super.paint( g ); // call superclass's paint method
21
22 g.setFont( new Font( "SansSerif", Font.BOLD, 12 ) );
Obtain FontMetrics
23 FontMetrics metrics = g.getFontMetrics(); object for current font
24 g.drawString( "Current font: " + g.getFont(), 10, 40 );

 2003 Prentice Hall, Inc.


All rights reserved.
25 g.drawString( "Ascent: " + metrics.getAscent(), 10, 55 ); Use FontMetrics Outline
to
26 g.drawString( "Descent: " + metrics.getDescent(), 10, 70 );
27 g.drawString( "Height: " + metrics.getHeight(), 10, 85 );
obtain ascent, descent,
28 g.drawString( "Leading: " + metrics.getLeading(), 10, 100 ); height and leading
Metrics.java
29
30 Font font = new Font( "Serif", Font.ITALIC, 14 ); Repeat same process for
31 metrics = g.getFontMetrics( font ); Lines 25-28
Serif 14-point italic font
32 g.setFont( font );
33 g.drawString( "Current font: " + font, 10, 130 ); Lines 30-37
34 g.drawString( "Ascent: " + metrics.getAscent(), 10, 145 );
35 g.drawString( "Descent: " + metrics.getDescent(), 10, 160 );
36 g.drawString( "Height: " + metrics.getHeight(), 10, 175 );
37 g.drawString( "Leading: " + metrics.getLeading(), 10, 190 );
38
39 } // end method paint
40
41 // execute application
42 public static void main( String args[] )
43 {
44 Metrics application = new Metrics();
45 application.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
46 }
47
48 } // end class Metrics

 2003 Prentice Hall, Inc.


All rights reserved.
Outline

Metrics.java

 2003 Prentice Hall, Inc.


All rights reserved.
28

12.5 Drawing Lines, Rectangles and Ovals

• Class Graphics
– Provides methods for drawing lines, rectangles and ovals
• All drawing methods require parameters width and height

 2003 Prentice Hall, Inc. All rights reserved.


Fig. 12.13 Graphics methods that draw lines, 29

rectangles and ovals


Method Description
public void drawLine( int x1, int y1, int x2, int y2 )

Draws a line between the point (x1, y1) and the point (x2, y2).
public void drawRect( int x, int y, int width, int height )
Draws a rectangle of the specified width and height. The top-left corner of
the rectangle has the coordinates (x, y).
public void fillRect( int x, int y, int width, int height )
Draws a solid rectangle with the specified width and height. The top-left
corner of the rectangle has the coordinate (x, y).
public void clearRect( int x, int y, int width, int height )
Draws a solid rectangle with the specified width and height in the current
background color. The top-left corner of the rectangle has the coordinate (x, y).
public void drawRoundRect( int x, int y, int width, int height,
int arcWidth, int arcHeight )

Draws a rectangle with rounded corners in the current color with the specified
width and height. The arcWidth and arcHeight determine the rounding of
the corners (see Fig. 12.15).
public void fillRoundRect( int x, int y, int width, int height,
int arcWidth, int arcHeight )

Draws a solid rectangle with rounded corners in the current color with the
specified width and height. The arcWidth and arcHeight determine the
rounding of the corners (see Fig. 12.15).

 2003 Prentice Hall, Inc. All rights reserved.


Fig. 12.13 Graphics methods that draw lines, 30

rectangles and ovals

Method Description
public void draw3DRect( int x, int y, int width, int height, boolean b )
Draws a three-dimensional rectangle in the current color with the specified
width and height. The top-left corner of the rectangle has the coordinates (x,
y). The rectangle appears raised when b is true and lowered when b is false.
public void fill3DRect( int x, int y, int width, int height, boolean b )
Draws a filled three-dimensional rectangle in the current color with the
specified width and height. The top-left corner of the rectangle has the
coordinates (x, y). The rectangle appears raised when b is true and lowered
when b is false.
public void drawOval( int x, int y, int width, int height )
Draws an oval in the current color with the specified width and height. The
bounding rectangle’s top-left corner is at the coordinates (x, y). The oval
touches all four sides of the bounding rectangle at the center of each side (see
Fig. 12.16).
public void fillOval( int x, int y, int width, int height )
Draws a filled oval in the current color with the specified width and height.
The bounding rectangle’s top-left corner is at the coordinates (x, y). The oval
touches all four sides of the bounding rectangle at the center of each side (see
Fig. 12.16).

 2003 Prentice Hall, Inc. All rights reserved.


1 // Fig. 12.14: LinesRectsOvals.java Outline
2 // Drawing lines, rectangles and ovals.
3 import java.awt.*;
4 import javax.swing.*; LinesRectsOvals
5
6 public class LinesRectsOvals extends JFrame {
.java
7
8 // set window's title bar String and dimensions
9 public LinesRectsOvals()
10 {
11 super( "Drawing lines, rectangles and ovals" );
12
13 setSize( 400, 165 );
14 setVisible( true );
15 }
16
17 // display various lines, rectangles and ovals
18 public void paint( Graphics g )
19 {
20 super.paint( g ); // call superclass's paint method
21
22 g.setColor( Color.RED );
23 g.drawLine( 5, 30, 350, 30 );
24
25 g.setColor( Color.BLUE );
26 g.drawRect( 5, 40, 90, 55 );
27 g.fillRect( 100, 40, 90, 55 );

 2003 Prentice Hall, Inc.


All rights reserved.
28 Outline
29 g.setColor( Color.CYAN );
30 g.fillRoundRect( 195, 40, 90, 55, 50, 50 ); Draw filled rounded rectangle
31 g.drawRoundRect( 290, 40, 90, 55, 20, 20 ); LinesRectsOvals
32 Draw (non-filled) rounded .java
rectangle
33 g.setColor( Color.YELLOW );
34 g.draw3DRect( 5, 100, 90, 55, true ); Draw 3D rectangle
35 g.fill3DRect( 100, 100, 90, 55, false ); Line 30
36 Draw filled 3D rectangle
37 g.setColor( Color.MAGENTA );
Line 31
38 g.drawOval( 195, 100, 90, 55 ); Draw oval
39 g.fillOval( 290, 100, 90, 55 );
40 Draw filled oval Line 34
41 } // end method paint
42 Line 35
43 // execute application
44 public static void main( String args[] )
45 {
Line 38
46 LinesRectsOvals application = new LinesRectsOvals();
47 application.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE ); Line 39
48 }
49
50 } // end class LinesRectsOvals

 2003 Prentice Hall, Inc.


All rights reserved.
Fig. 12.15 Arc width and arc height for rounded 33
rectangles

( x, y)

a rc h e ig h t

a rc wid t h h e ig h t

w id th

 2003 Prentice Hall, Inc. All rights reserved.


34

Fig. 12.16 Oval bounded by a rectangle

( x , y)

h e ig h t

w id th

 2003 Prentice Hall, Inc. All rights reserved.


35

12.6 Drawing Arcs

• Arc
– Portion of oval
– Measured in degrees
– Sweeps the number of degrees in arc angle
– Sweep starts at starting angle
• Counterclockwise sweep is measure in positive degrees
• Clockwise sweep is measure in negative degrees

 2003 Prentice Hall, Inc. All rights reserved.


36

Fig. 12.17 Positive and negative arc angles

Positive angles Negative angles


90° 90°

180° 0° 180° 0°

270° 270°

 2003 Prentice Hall, Inc. All rights reserved.


37

Fig. 12.18 Graphics methods for drawing arcs

Method Description
public void drawArc( int x, int y, int width, int height, int startAngle,
int arcAngle )

Draws an arc relative to the bounding rectangle’s top-left coordinates (x, y)


with the specified width and height. The arc segment is drawn starting at
startAngle and sweeps arcAngle degrees.
public void fillArc( int x, int y, int width, int height, int startAngle,
int arcAngle )

Draws a solid arc (i.e., a sector) relative to the bounding rectangle’s top-left
coordinates (x, y) with the specified width and height. The arc segment is
drawn starting at startAngle and sweeps arcAngle degrees.

 2003 Prentice Hall, Inc. All rights reserved.


1 // Fig. 12.19: DrawArcs.java Outline
2 // Drawing arcs.
3 import java.awt.*;
4 import javax.swing.*; DrawArcs.java
5
6 public class DrawArcs extends JFrame {
7 Lines 24-26
8 // set window's title bar String and dimensions
9 public DrawArcs()
10 {
11 super( "Drawing Arcs" );
12
13 setSize( 300, 170 );
14 setVisible( true );
15 }
16
17 // draw rectangles and arcs
18 public void paint( Graphics g )
19 {
20 super.paint( g ); // call superclass's paint method
21
22 // start at 0 and sweep 360 degrees
23 g.setColor( Color.YELLOW ); Draw first arc that
24 g.drawRect( 15, 35, 80, 80 ); sweeps 360 degrees and
25 g.setColor( Color.BLACK ); is contained in rectangle
26 g.drawArc( 15, 35, 80, 80, 0, 360 );

 2003 Prentice Hall, Inc.


All rights reserved.
27 Outline
28 // start at 0 and sweep 110 degrees
29 g.setColor( Color.YELLOW );
30 g.drawRect( 100, 35, 80, 80 ); Draw second arc that
DrawArcs.java
31 g.setColor( Color.BLACK ); sweeps 110 degrees and
32 g.drawArc( 100, 35, 80, 80, 0, 110 ); is contained in rectangle
33 Lines 30-32
34 // start at 0 and sweep -270 degrees
35 g.setColor( Color.YELLOW ); Lines 36-38
36 g.drawRect( 185, 35, 80, 80 ); Draw third arc that
37 g.setColor( Color.BLACK ); sweeps -270 degrees and41
Line
38 g.drawArc( 185, 35, 80, 80, 0, -270 );
is contained in rectangle
39
40 // start at 0 and sweep 360 degrees Line 44
41 g.fillArc( 15, 120, 80, 40, 0, 360 ); Draw fourth arc that is filled, has starting
42 angle 0 and sweeps 360 degrees
Line 47
43 // start at 270 and sweep -90 degrees
44 g.fillArc( 100, 120, 80, 40, 270, -90 );
Draw fifth arc that is filled, has starting
45
46 // start at 0 and sweep -270 degrees
angle 270 and sweeps -90 degrees
47 g.fillArc( 185, 120, 80, 40, 0, -270 );
48 Draw sixth arc that is filled, has starting
49 } // end method paint angle 0 and sweeps -270 degrees
50

 2003 Prentice Hall, Inc.


All rights reserved.
51 // execute application Outline
52 public static void main( String args[] )
53 {
54 DrawArcs application = new DrawArcs(); DrawArcs.java
55 application.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
56 }
57
58 } // end class DrawArcs

 2003 Prentice Hall, Inc.


All rights reserved.
41

12.7 Drawing Polygons and Polylines

• Class Polygon
– Polygons
• Multisided shapes
– Polylines
• Series of connected points

 2003 Prentice Hall, Inc. All rights reserved.


Fig. 12.20 Graphics methods for drawing 42

polygons and class Polygon methods


Method Description
Graphics methods for drawing polygons

public void drawPolygon( int xPoints[], int yPoints[], int points )


Draws a polygon. The x-coordinate of each point is specified in the xPoints
array and the y-coordinate of each point is specified in the yPoints array. The
last argument specifies the number of points. This method draws a closed
polygon. If the last point is different from the first point, the polygon is closed
by a line that connects the last point to the first point.
public void drawPolyline( int xPoints[], int yPoints[], int points )
Draws a sequence of connected lines. The x-coordinate of each point is
specified in the xPoints array and the y-coordinate of each point is specified in
the yPoints array. The last argument specifies the number of points. If the
last point is different from the first point, the polyline is not closed.
public void drawPolygon( Polygon p )
Draws the specified polygon.
public void fillPolygon( int xPoints[], int yPoints[], int points )
Draws a solid polygon. The x-coordinate of each point is specified in the
xPoints array and the y-coordinate of each point is specified in the yPoints
array. The last argument specifies the number of points. This method draws a
closed polygon. If the last point is different from the first point, the polygon is
closed by a line that connects the last point to the first point.
public void fillPolygon( Polygon p )
Draws the specified solid polygon. The polygon is closed.

 2003 Prentice Hall, Inc. All rights reserved.


Fig. 12.20 Graphics methods for drawing 43

polygons and class Polygon methods

Method Description
Polygon constructors and methods
public Polygon()
Constructs a new polygon object. The polygon does not contain any points.
public Polygon( int xValues[], int yValues[], int numberOfPoints )
Constructs a new polygon object. The polygon has numberOfPoints sides,
with each point consisting of an x-coordinate from xValues and a y-coordinate
from yValues.
public void addPoint( int x, int y )

Adds pairs of x- and y-coordinates to the Polygon.

 2003 Prentice Hall, Inc. All rights reserved.


1 // Fig. 12.21: DrawPolygons.java Outline
2 // Drawing polygons.
3 import java.awt.*;
4 import javax.swing.*; DrawPolygons.ja
5
6 public class DrawPolygons extends JFrame {
va
7
8 // set window's title bar String and dimensions Lines 22-23
9 public DrawPolygons()
10 {
Line 26
11 super( "Drawing Polygons" );
12
13 setSize( 275, 230 );
14 setVisible( true );
15 }
16
17 // draw polygons and polylines int arrays specifying
18 public void paint( Graphics g ) Polygon polygon1 points
19 {
20 super.paint( g ); // call superclass's paint method
21 Draw polygon1 to screen
22 int xValues[] = { 20, 40, 50, 30, 20, 15 };
23 int yValues[] = { 50, 50, 60, 80, 80, 60 };
24 Polygon polygon1 = new Polygon( xValues, yValues, 6 );
25
26 g.drawPolygon( polygon1 );
27

 2003 Prentice Hall, Inc.


All rights reserved.
28 int xValues2[] = { 70, 90, 100, 80, 70, 65, 60 }; Outline
29 int yValues2[] = { 100, 100, 110, 110, 130, 110, 90 };
30 int arrays specifying
31 g.drawPolyline( xValues2, yValues2, 7 ); Polyline points
DrawPolygons.ja
32
33 int xValues3[] = { 120, 140, 150, 190 };
va
34 int yValues3[] = { 40, 70, 80, 60 };
Draw Polyline to screen
35 Lines 28-29
36 g.fillPolygon( xValues3, yValues3, 4 ); Specify points and draw (filled)
37
Polygon to Line 31
screen
38 Polygon polygon2 = new Polygon();
39 polygon2.addPoint( 165, 135 );
40 polygon2.addPoint( 175, 150 ); Lines 33-36
Method addPoint adds pairs of
41 polygon2.addPoint( 270, 200 );
42 polygon2.addPoint( 200, 220 ); x-y coordinates to a Polygon
Line 39
43 polygon2.addPoint( 130, 180 );
44
45 g.fillPolygon( polygon2 );
46
47 } // end method paint
48
49 // execute application
50 public static void main( String args[] )
51 {
52 DrawPolygons application = new DrawPolygons();
53 application.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
54 }
55
56 } // end class DrawPolygons

 2003 Prentice Hall, Inc.


All rights reserved.
Outline

DrawPolygons.ja
va

 2003 Prentice Hall, Inc.


All rights reserved.
47

12.8 Java2D API

• Java 2D API
– Provides advanced 2D graphics capabilities
• java.awt
• java.awt.image
• java.awt.color
• java.awt.font
• java.awt.geom
• java.awt.print
• java.awt.image.renderable
– Uses class java.awt.Graphics2D
• Extends class java.awt.Graphics

 2003 Prentice Hall, Inc. All rights reserved.


48

12.8 Java2D API

• Java 2D shapes
– Package java.awt.geom
• Ellipse2D.Double
• Rectangle2D.Double
• RoundRectangle2D.Double
• Arc3D.Double
• Lines2D.Double

 2003 Prentice Hall, Inc. All rights reserved.


1 // Fig. 12.22: Shapes.java Outline
2 // Demonstrating some Java2D shapes.
3 import java.awt.*;
4 import java.awt.geom.*; Shapes.java
5 import java.awt.image.*;
6 import javax.swing.*;
7
8 public class Shapes extends JFrame {
9
10 // set window's title bar String and dimensions
11 public Shapes()
12 {
13 super( "Drawing 2D shapes" );
14
15 setSize( 425, 160 );
16 setVisible( true );
17 }
18
19 // draw shapes with Java2D API
20 public void paint( Graphics g )
21 {
22 super.paint( g ); // call superclass's paint method
23
24 Graphics2D g2d = ( Graphics2D ) g; // cast g to Graphics2D
25

 2003 Prentice Hall, Inc.


All rights reserved.
26 // draw 2D ellipse filled with a blue-yellow gradient Outline
27 g2d.setPaint( new GradientPaint( 5, 30, Color.BLUE, 35, 100, Use GradientPaint to
28 Color.YELLOW, true ) ); fill shape with gradient
29 g2d.fill( new Ellipse2D.Double( 5, 30, 65, 100 ) ); Shapes.java
30 Fill ellipse with gradient
31 // draw 2D rectangle in red
32 g2d.setPaint( Color.RED ); Lines 27-28
Use BasicStroke to draw
33 g2d.setStroke( new BasicStroke( 10.0f ) );
2D red-border rectangle
34 g2d.draw( new Rectangle2D.Double( 80, 30, 65, 100 ) ); Line 29
35
36 // draw 2D rounded rectangle with a buffered background
37
Lines 33-34
BufferedImage buffImage = new BufferedImage( 10, 10, BufferedImage produces
38 BufferedImage.TYPE_INT_RGB );
39
image to be manipulated
Lines 37-28
40 Graphics2D gg = buffImage.createGraphics();
41 gg.setColor( Color.YELLOW ); // draw in yellow
Lines 40-48
42 gg.fillRect( 0, 0, 10, 10 ); // draw a filled rectangle
43 gg.setColor( Color.BLACK ); // draw in black
44 gg.drawRect( 1, 1, 6, 6 ); // draw a rectangle
Draw texture into
45 gg.setColor( Color.BLUE ); // draw in blue BufferedImage
46 gg.fillRect( 1, 1, 3, 3 ); // draw a filled rectangle
47 gg.setColor( Color.RED ); // draw in red
48 gg.fillRect( 4, 4, 3, 3 ); // draw a filled rectangle
49

 2003 Prentice Hall, Inc.


All rights reserved.
50 // paint buffImage onto the JFrame Use BufferedImage as texture Outline
51 g2d.setPaint( new TexturePaint( buffImage,
52 new Rectangle( 10, 10 ) ) );
for painting rounded rectangle
53 g2d.fill( new RoundRectangle2D.Double( 155, 30, 75, 100, 50, 50 ) ); Shapes.java
54
Use Arc2D.PIE to
55 // draw 2D pie-shaped arc in white
56 g2d.setPaint( Color.WHITE ); drawLines
white-border
51-52
57 g2d.setStroke( new BasicStroke( 6.0f ) ); 2D pie-shaped arc
58 g2d.draw( new Arc2D.Double( 240, 30, 75, 100, 0, 270, Arc2D.PIE ) ); Line 58
59
60 // draw 2D lines in green and yellow
61 g2d.setPaint( Color.GREEN );
Line 62
62 g2d.draw( new Line2D.Double( 395, 30, 320, 150 ) ); Draw solid green line
63 Line 69
64 float dashes[] = { 10 };
65
66 g2d.setPaint( Color.YELLOW );
67 g2d.setStroke( new BasicStroke( 4, BasicStroke.CAP_ROUND,
68 BasicStroke.JOIN_ROUND, 10, dashes, 0 ) );
Draw dashed yellow line
69 g2d.draw( new Line2D.Double( 320, 30, 395, 150 ) );
70 that crosses solid green line
71 } // end method paint
72

 2003 Prentice Hall, Inc.


All rights reserved.
73 // execute application Outline
74 public static void main( String args[] )
75 {
76 Shapes application = new Shapes(); Shapes.java
77 application.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
78 }
79
80 } // end class Shapes

 2003 Prentice Hall, Inc.


All rights reserved.
1 // Fig. 12.23: Shapes2.java Outline
2 // Demonstrating a general path.
3 import java.awt.*;
4 import java.awt.geom.*; Shapes2.java
5 import javax.swing.*;
6
7 public class Shapes2 extends JFrame { Lines 24-25
8
9 // set window's title bar String, background color and dimensions
10 public Shapes2()
11 {
12 super( "Drawing 2D Shapes" );
13
14 getContentPane().setBackground( Color.WHITE );
15 setSize( 400, 400 );
16 setVisible( true );
17 }
18
19 // draw general paths
x-y coordinates that comprise star
20 public void paint( Graphics g )
21 {
22 super.paint( g ); // call superclass's paint method
23
24 int xPoints[] = { 55, 67, 109, 73, 83, 55, 27, 37, 1, 43 };
25 int yPoints[] = { 0, 36, 36, 54, 96, 72, 96, 54, 36, 36 };
26

 2003 Prentice Hall, Inc.


All rights reserved.
GeneralPath is a shape
27 Graphics2D g2d = ( Graphics2D ) g;
constructed from
Outline
straight
28 GeneralPath star = new GeneralPath(); // create GeneralPath object
29 lines and complex curves
30 // set the initial coordinate of the General Path Shapes2.java
31 star.moveTo( xPoints[ 0 ], yPoints[ 0 ] );
32
33 // create the star--this does not draw the star Line 28
34 for ( int count = 1; count < xPoints.length; count++ ) Create star
35 star.lineTo( xPoints[ count ], yPoints[ count ] ); Lines 31-37
36
37 star.closePath(); // close the shape
38
Lines 42-50
39 g2d.translate( 200, 200 ); // translate the origin to (200, 200)
40
41 // rotate around origin and draw stars in random colors
42 for ( int count = 1; count <= 20; count++ ) {
43 g2d.rotate( Math.PI / 10.0 ); // rotate coordinate system
44
45 // set random drawing color
46 g2d.setColor( new Color( ( int ) ( Math.random() * 256 ),
47 ( int ) ( Math.random() * 256 ),
48 ( int ) ( Math.random() * 256 ) ) );
Draw filled, randomly colored
49
50 g2d.fill( star ); // draw filled star
star 20 times around origin
51 }

 2003 Prentice Hall, Inc.


All rights reserved.
Outline

Shapes2.java

 2003 Prentice Hall, Inc.


All rights reserved.
56
12.9 (Optional Case Study) Thinking About
Objects: Designing Interfaces with the UML
• Use UML to represent listener interfaces
– Class diagram modeling realizations
• Classes realize, or implement, interface behaviors
• Person realizes DoorListener
• In Java, class Person implements interface
DoorListener

 2003 Prentice Hall, Inc. All rights reserved.


Fig. 12.24 Class diagram that models class 57

Person realizing interface DoorListener

Person JavaInterface
DoorListener
- ID : Integer
- moving : Boolean = true
- location : Location
+ doorOpened( doorEvent : DoorEvent ) : void
+ doorClosed( doorEvent : DoorEvent ) : void
+ doorOpened( ) : void
+ doorClosed( ) : void

 2003 Prentice Hall, Inc. All rights reserved.


58
Fig. 12.25 Elided class diagram that models class
Person realizing interface DoorListener

Person
DoorListener
- ID : Integer
- moving : Boolean = true
- location : Location
+ doorOpened( ) : void
+ doorClosed( ) : void

 2003 Prentice Hall, Inc. All rights reserved.


1 // Person.java Outline
2 // Generated from Fig. 11.24
3 public class Person implements DoorListener {
4 Person.java
5 // attributes
6 private int ID;
7 private boolean moving = true; Lines 3-15
8 private Location location;
9
10 // constructor
Class Person must implement
11 public Person() {}
12
DoorListener methods
13 // methods of DoorListener
14 public void doorOpened( DoorEvent doorEvent ) {}
15 public void doorClosed( DoorEvent doorEvent ) {}
16 }

 2003 Prentice Hall, Inc.


All rights reserved.
Fig. 12.27 Class diagram that models 60

realizations in the elevator model


ButtonListener DoorListener BellListener

Elevator

LightListener ButtonListener DoorListener DoorListener

ElevatorShaft Person

ElevatorMoveListener

Door Light Bell Button

 2003 Prentice Hall, Inc. All rights reserved.


61

Fig. 12.28 Class diagram for listener interfaces


JavaInterface
BellListener

+ bellRang( BellEvent : bellEvent ) : void

JavaInterface
ButtonListener

+ buttonPressed( ButtonEvent : buttonEvent ) : void


+ buttonReset( ButtonEvent : buttonEvent ) : void
JavaInterface
DoorListener

+ doorOpened( DoorEvent : doorEvent ) : void


+ doorClosed( DoorEvent : doorEvent ) : void
JavaInterface
ElevatorMoveListener

+ elevatorArrived( ElevatorMoveEvent : elevatorMoveEvent ) : void


+ elevatorDeparted( ElevatorMoveEvent : elevatorMoveEvent ) : void
JavaInterface
LightListener

+ lightTurnedOn( LightEvent : lightEvent ) : void


+ lightTurnedOff( LightEvent : lightEvent ) : void
JavaInterface
PersonMoveListener

+ personCreated( PersonMoveEvent : personMoveEvent ) : void


+ personArrived( PersonMoveEvent : personMoveEvent ) : void
+ personDeparted( PersonMoveEvent : personMoveEvent ) : void
+ personPressedButton( PersonMoveEvent : personMoveEvent ) : void
+ personEntered( PersonMoveEvent : personMoveEvent ) : void
+ personExited( PersonMoveEvent : personMoveEvent ) : void

 2003 Prentice Hall, Inc. All rights reserved.

You might also like