Class Draw

  • All Implemented Interfaces:
    ActionListener, KeyListener, MouseListener, MouseMotionListener, EventListener

    public final class Draw
    extends Object
    implements ActionListener, MouseListener, MouseMotionListener, KeyListener
    The Draw data type provides a basic capability for creating drawings with your programs. It uses a simple graphics model that allows you to create drawings consisting of points, lines, and curves in a window on your computer and to save the drawings to a file. This is the object-oriented version of standard draw; it supports multiple independent drawing windows.

    For additional documentation, see Section 3.1 of Computer Science: An Interdisciplinary Approach by Robert Sedgewick and Kevin Wayne.

    Author:
    Robert Sedgewick, Kevin Wayne
    • Field Summary

      Fields 
      Modifier and Type Field Description
      static Color AQUA
      The color aqua (0, 255, 255).
      static Color BLACK
      The color black (0, 0, 0).
      static Color BLUE
      The color blue (0, 0, 255).
      static Color BOOK_BLUE
      The shade of blue used in Introduction to Programming in Java.
      static Color BOOK_LIGHT_BLUE
      The shade of light blue used in Introduction to Programming in Java.
      static Color BOOK_RED
      The shade of red used in Algorithms, 4th edition.
      static Color CYAN
      The color cyan (0, 255, 255).
      static Color DARK_GRAY
      The color dark gray (64, 64, 64).
      static Color FUSCIA
      The color fuscia (255, 0, 255).
      static Color GRAY
      The color gray (128, 128, 128).
      static Color GREEN
      The color green (0, 128, 0).
      static Color LIGHT_GRAY
      The color light gray (192, 192, 192).
      static Color LIME
      The color lime (0, 255, 0).
      static Color MAGENTA
      The color magenta (255, 0, 255).
      static Color MAROON
      The color maroon (128, 0, 0).
      static Color NAVY
      The color navy (0, 0, 128).
      static Color OLIVE
      The color olive (128, 128, 0).
      static Color ORANGE
      The color orange (255, 200, 0).
      static Color PINK
      The color pink (255, 175, 175).
      static Color PRINCETON_ORANGE
      The shade of orange used in Princeton University's identity.
      static Color PURPLE
      The color purple (128, 0, 128).
      static Color RED
      The color red (255, 0, 0).
      static Color SILVER
      The color silver (192, 192, 192).
      static Color TEAL
      The color teal (0, 128, 128).
      static Color TRANSPARENT
      A 100% transparent color, for a transparent background.
      static Color WHITE
      The color white (255, 255, 255).
      static Color YELLOW
      The color yellow (255, 255, 0).
    • Constructor Summary

      Constructors 
      Constructor Description
      Draw()
      Initializes an empty drawing object.
    • Method Summary

      All Methods Static Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      void actionPerformed​(ActionEvent event)
      This method cannot be called directly.
      void addListener​(DrawListener listener)
      Adds a DrawListener to listen to keyboard and mouse events.
      void arc​(double x, double y, double radius, double angle1, double angle2)
      Draws a circular arc of the specified radius, centered at (x, y), from angle1 to angle2 (in degrees).
      void circle​(double x, double y, double radius)
      Draws a circle of the specified radius, centered at (x, y).
      void clear()
      Clears the screen using the default background color (white).
      void clear​(Color color)
      Clears the screen using the specified background color.
      void close()
      Closes the drawing window.
      void disableDoubleBuffering()
      Disable double buffering.
      void disableTimer()  
      void ellipse​(double x, double y, double semiMajorAxis, double semiMinorAxis)
      Draws an ellipse with the specified semimajor and semiminor axes, centered at (x, y).
      void enableDoubleBuffering()
      Enable double buffering.
      void enableTimer​(int callsPerSecond)
      Sets a timer that calls update() method a specified number of times per second.
      void filledCircle​(double x, double y, double radius)
      Draws a filled circle of the specified radius, centered at (x, y).
      void filledEllipse​(double x, double y, double semiMajorAxis, double semiMinorAxis)
      Draws a filled ellipse with the specified semimajor and semiminor axes, centered at (x, y).
      void filledPolygon​(double[] x, double[] y)
      Draws a filled polygon with the vertices (x0, y0), (x1, y1), ..., (xn–1, yn–1).
      void filledRectangle​(double x, double y, double halfWidth, double halfHeight)
      Draws a filled rectangle of the specified size, centered at (x, y).
      void filledSquare​(double x, double y, double halfLength)
      Draws a square of the specified size, centered at (x, y).
      Color getBackgroundColor()
      Returns the current background color.
      Font getFont()
      Returns the current font.
      JLabel getJLabel()
      Returns the current JLabel for use in some other GUI.
      Color getPenColor()
      Returns the current pen color.
      double getPenRadius()
      Returns the current pen radius.
      boolean hasNextKeyTyped()
      Returns true if the user has typed a key.
      boolean isKeyPressed​(int keycode)
      Returns true if the keycode is being pressed.
      boolean isMousePressed()
      Returns true if the mouse is being pressed.
      void keyPressed​(KeyEvent event)
      This method cannot be called directly.
      void keyReleased​(KeyEvent event)
      This method cannot be called directly.
      void keyTyped​(KeyEvent event)
      This method cannot be called directly.
      void line​(double x0, double y0, double x1, double y1)
      Draws a line from (x0, y0) to (x1, y1).
      static void main​(String[] args)
      Test client.
      void mouseClicked​(MouseEvent event)
      This method cannot be called directly.
      void mouseDragged​(MouseEvent event)
      This method cannot be called directly.
      void mouseEntered​(MouseEvent event)
      This method cannot be called directly.
      void mouseExited​(MouseEvent event)
      This method cannot be called directly.
      void mouseMoved​(MouseEvent event)
      This method cannot be called directly.
      void mousePressed​(MouseEvent event)
      This method cannot be called directly.
      void mouseReleased​(MouseEvent event)
      This method cannot be called directly.
      double mouseX()
      Returns the x-coordinate of the mouse.
      double mouseY()
      Returns the y-coordinate of the mouse.
      char nextKeyTyped()
      The next key typed by the user.
      void pause​(int t)
      Pause for t milliseconds.
      void picture​(double x, double y, String filename)
      Draws the specified image centered at (x, y).
      void picture​(double x, double y, String filename, double degrees)
      Draws the specified image centered at (x, y), rotated given number of degrees.
      void picture​(double x, double y, String filename, double scaledWidth, double scaledHeight)
      Draws the specified image centered at (x, y), rescaled to the specified bounding box.
      void picture​(double x, double y, String filename, double scaledWidth, double scaledHeight, double degrees)
      Draws the specified image centered at (x, y), rotated given number of degrees, and rescaled to the specified bounding box.
      void point​(double x, double y)
      Draws a point at (x, y).
      void polygon​(double[] x, double[] y)
      Draws a polygon with the vertices (x0, y0), (x1, y1), ..., (xn–1, yn–1).
      void rectangle​(double x, double y, double halfWidth, double halfHeight)
      Draws a rectangle of the specified size, centered at (x, y).
      void save​(String filename)
      Saves the drawing to a file in a supported file format (typically JPEG, PNG, GIF, TIFF, and BMP).
      void setCanvasSize()
      Sets the canvas (drawing area) to be 512-by-512 pixels.
      void setCanvasSize​(int canvasWidth, int canvasHeight)
      Sets the canvas (drawing area) to be width-by-height pixels.
      void setDefaultCloseOperation​(int value)
      Sets the default close operation.
      void setFont()
      Sets the font to the default font (sans serif, 16 point).
      void setFont​(Font font)
      Sets the font to the given value.
      void setLocationOnScreen​(int x, int y)
      Sets the upper-left hand corner of the drawing window to be (x, y), where (0, 0) is upper left.
      void setPenColor()
      Sets the pen color to the default color (black).
      void setPenColor​(int red, int green, int blue)
      Sets the pen color to the given RGB color.
      void setPenColor​(Color color)
      Sets the pen color to the given color.
      void setPenRadius()
      Sets the pen radius to the default (0.002).
      void setPenRadius​(double radius)
      Sets the radius of the pen to the given size.
      void setScale()
      Sets both the x-scale and y-scale to the default range (between 0.0 and 1.0).
      void setScale​(double min, double max)
      Sets both the x-scale and y-scale to the (same) specified range.
      void setTitle​(String windowTitle)
      Sets the title of the drawing window to the specified string.
      void setVisible​(boolean isVisible)
      Makes the drawing window visible or invisible.
      void setXscale()
      Sets the x-scale to the default range (between 0.0 and 1.0).
      void setXscale​(double min, double max)
      Sets the x-scale to the specified range.
      void setYscale()
      Sets the y-scale to the default range (between 0.0 and 1.0).
      void setYscale​(double min, double max)
      Sets the y-scale to the specified range.
      void show()
      Copies offscreen buffer to onscreen buffer.
      void square​(double x, double y, double halfLength)
      Draws a square of the specified size, centered at (x, y).
      void text​(double x, double y, String text)
      Writes the given text string in the current font, centered at (x, y).
      void text​(double x, double y, String text, double degrees)
      Writes the given text string in the current font, centered at (x, y) and rotated by the specified number of degrees.
      void textLeft​(double x, double y, String text)
      Writes the given text string in the current font, left-aligned at (x, y).
      void textRight​(double x, double y, String text)
      Writes the given text string in the current font, right-aligned at (x, y).
      void xorOff()
      Turns off xor mode.
      void xorOn()
      Turns on xor mode.
    • Field Detail

      • AQUA

        public static final Color AQUA
        The color aqua (0, 255, 255).
      • BLACK

        public static final Color BLACK
        The color black (0, 0, 0).
      • BLUE

        public static final Color BLUE
        The color blue (0, 0, 255).
      • CYAN

        public static final Color CYAN
        The color cyan (0, 255, 255).
      • FUSCIA

        public static final Color FUSCIA
        The color fuscia (255, 0, 255).
      • DARK_GRAY

        public static final Color DARK_GRAY
        The color dark gray (64, 64, 64).
      • GRAY

        public static final Color GRAY
        The color gray (128, 128, 128).
      • GREEN

        public static final Color GREEN
        The color green (0, 128, 0).
      • LIGHT_GRAY

        public static final Color LIGHT_GRAY
        The color light gray (192, 192, 192).
      • LIME

        public static final Color LIME
        The color lime (0, 255, 0).
      • MAGENTA

        public static final Color MAGENTA
        The color magenta (255, 0, 255).
      • MAROON

        public static final Color MAROON
        The color maroon (128, 0, 0).
      • NAVY

        public static final Color NAVY
        The color navy (0, 0, 128).
      • OLIVE

        public static final Color OLIVE
        The color olive (128, 128, 0).
      • ORANGE

        public static final Color ORANGE
        The color orange (255, 200, 0).
      • PINK

        public static final Color PINK
        The color pink (255, 175, 175).
      • PURPLE

        public static final Color PURPLE
        The color purple (128, 0, 128).
      • RED

        public static final Color RED
        The color red (255, 0, 0).
      • SILVER

        public static final Color SILVER
        The color silver (192, 192, 192).
      • TEAL

        public static final Color TEAL
        The color teal (0, 128, 128).
      • WHITE

        public static final Color WHITE
        The color white (255, 255, 255).
      • YELLOW

        public static final Color YELLOW
        The color yellow (255, 255, 0).
      • TRANSPARENT

        public static final Color TRANSPARENT
        A 100% transparent color, for a transparent background.
      • BOOK_BLUE

        public static final Color BOOK_BLUE
        The shade of blue used in Introduction to Programming in Java. It is Pantone 300U. The RGB values are approximately (9, 90, 166).
      • BOOK_LIGHT_BLUE

        public static final Color BOOK_LIGHT_BLUE
        The shade of light blue used in Introduction to Programming in Java. The RGB values are approximately (103, 198, 243).
      • BOOK_RED

        public static final Color BOOK_RED
        The shade of red used in Algorithms, 4th edition. It is Pantone 1805U. The RGB values are approximately (150, 35, 31).
      • PRINCETON_ORANGE

        public static final Color PRINCETON_ORANGE
        The shade of orange used in Princeton University's identity. It is PMS 158. The RGB values are approximately (245, 128, 37).
    • Constructor Detail

      • Draw

        public Draw()
        Initializes an empty drawing object.
    • Method Detail

      • setVisible

        public void setVisible​(boolean isVisible)
        Makes the drawing window visible or invisible.
        Parameters:
        isVisible - if true, makes the drawing window visible, otherwise hides the drawing window.
      • setLocationOnScreen

        public void setLocationOnScreen​(int x,
                                        int y)
        Sets the upper-left hand corner of the drawing window to be (x, y), where (0, 0) is upper left.
        Parameters:
        x - the number of pixels from the left
        y - the number of pixels from the top
        Throws:
        IllegalArgumentException - if the width or height is 0 or negative
      • setDefaultCloseOperation

        public void setDefaultCloseOperation​(int value)
        Sets the default close operation.
        Parameters:
        value - the value, typically JFrame.EXIT_ON_CLOSE (close all windows) or JFrame.DISPOSE_ON_CLOSE (close current window)
      • setCanvasSize

        public void setCanvasSize()
        Sets the canvas (drawing area) to be 512-by-512 pixels. This also clears the current drawing using the default background color (white). Ordinarily, this method is called once, at the very beginning of a program.
      • setCanvasSize

        public void setCanvasSize​(int canvasWidth,
                                  int canvasHeight)
        Sets the canvas (drawing area) to be width-by-height pixels. This also clears the current drawing using the default background color (white). Ordinarily, this method is called once, at the very beginning of a program.
        Parameters:
        canvasWidth - the width as a number of pixels
        canvasHeight - the height as a number of pixels
        Throws:
        IllegalArgumentException - unless both canvasWidth and canvasHeight are positive
      • close

        public void close()
        Closes the drawing window. This allows the client program to terminate instead of requiring the user to close the drawing window manually. Drawing after calling this method will restore the previous window state.
      • setTitle

        public void setTitle​(String windowTitle)
        Sets the title of the drawing window to the specified string.
        Parameters:
        windowTitle - the title of the window
        Throws:
        IllegalArgumentException - if title is null
      • setXscale

        public void setXscale()
        Sets the x-scale to the default range (between 0.0 and 1.0).
      • setYscale

        public void setYscale()
        Sets the y-scale to the default range (between 0.0 and 1.0).
      • setXscale

        public void setXscale​(double min,
                              double max)
        Sets the x-scale to the specified range.
        Parameters:
        min - the minimum value of the x-scale
        max - the maximum value of the x-scale
        Throws:
        IllegalArgumentException - if (max == min)
        IllegalArgumentException - if either min or max is either NaN or infinite
      • setYscale

        public void setYscale​(double min,
                              double max)
        Sets the y-scale to the specified range.
        Parameters:
        min - the minimum value of the y-scale
        max - the maximum value of the y-scale
        Throws:
        IllegalArgumentException - if (max == min)
        IllegalArgumentException - if either min or max is either NaN or infinite
      • setScale

        public void setScale()
        Sets both the x-scale and y-scale to the default range (between 0.0 and 1.0).
      • setScale

        public void setScale​(double min,
                             double max)
        Sets both the x-scale and y-scale to the (same) specified range.
        Parameters:
        min - the minimum value of the y-scale
        max - the maximum value of the y-scale
        Throws:
        IllegalArgumentException - if (max == min)
        IllegalArgumentException - if either min or max is either NaN or infinite
      • clear

        public void clear()
        Clears the screen using the default background color (white).
      • clear

        public void clear​(Color color)
        Clears the screen using the specified background color. To make the background transparent, use Draw.TRANSPARENT.
        Parameters:
        color - the color to make the background
        Throws:
        IllegalArgumentException - if color is null
      • getPenRadius

        public double getPenRadius()
        Returns the current pen radius.
        Returns:
        the current pen radius
      • setPenRadius

        public void setPenRadius()
        Sets the pen radius to the default (0.002).
      • setPenRadius

        public void setPenRadius​(double radius)
        Sets the radius of the pen to the given size.
        Parameters:
        radius - the radius of the pen
        Throws:
        IllegalArgumentException - if radius is negative, NaN, or infinite
      • getPenColor

        public Color getPenColor()
        Returns the current pen color.
        Returns:
        the current pen color
      • getBackgroundColor

        public Color getBackgroundColor()
        Returns the current background color.
        Returns:
        the current background color
      • setPenColor

        public void setPenColor()
        Sets the pen color to the default color (black).
      • setPenColor

        public void setPenColor​(Color color)
        Sets the pen color to the given color.
        Parameters:
        color - the color to make the pen
        Throws:
        IllegalArgumentException - if color is null
      • setPenColor

        public void setPenColor​(int red,
                                int green,
                                int blue)
        Sets the pen color to the given RGB color.
        Parameters:
        red - the amount of red (between 0 and 255)
        green - the amount of green (between 0 and 255)
        blue - the amount of blue (between 0 and 255)
        Throws:
        IllegalArgumentException - if red, green, or blue is outside its prescribed range
      • xorOn

        public void xorOn()
        Turns on xor mode.
      • xorOff

        public void xorOff()
        Turns off xor mode.
      • getJLabel

        public JLabel getJLabel()
        Returns the current JLabel for use in some other GUI.
        Returns:
        the current JLabel
      • getFont

        public Font getFont()
        Returns the current font.
        Returns:
        the current font
      • setFont

        public void setFont()
        Sets the font to the default font (sans serif, 16 point).
      • setFont

        public void setFont​(Font font)
        Sets the font to the given value.
        Parameters:
        font - the font
        Throws:
        IllegalArgumentException - if font is null
      • line

        public void line​(double x0,
                         double y0,
                         double x1,
                         double y1)
        Draws a line from (x0, y0) to (x1, y1).
        Parameters:
        x0 - the x-coordinate of the starting point
        y0 - the y-coordinate of the starting point
        x1 - the x-coordinate of the destination point
        y1 - the y-coordinate of the destination point
        Throws:
        IllegalArgumentException - if any coordinate is either NaN or infinite
      • point

        public void point​(double x,
                          double y)
        Draws a point at (x, y).
        Parameters:
        x - the x-coordinate of the point
        y - the y-coordinate of the point
        Throws:
        IllegalArgumentException - if either x or y is either NaN or infinite
      • circle

        public void circle​(double x,
                           double y,
                           double radius)
        Draws a circle of the specified radius, centered at (x, y).
        Parameters:
        x - the x-coordinate of the center of the circle
        y - the y-coordinate of the center of the circle
        radius - the radius of the circle
        Throws:
        IllegalArgumentException - if radius is negative
        IllegalArgumentException - if any argument is either NaN or infinite
      • filledCircle

        public void filledCircle​(double x,
                                 double y,
                                 double radius)
        Draws a filled circle of the specified radius, centered at (x, y).
        Parameters:
        x - the x-coordinate of the center of the circle
        y - the y-coordinate of the center of the circle
        radius - the radius of the circle
        Throws:
        IllegalArgumentException - if radius is negative
        IllegalArgumentException - if any argument is either NaN or infinite
      • ellipse

        public void ellipse​(double x,
                            double y,
                            double semiMajorAxis,
                            double semiMinorAxis)
        Draws an ellipse with the specified semimajor and semiminor axes, centered at (x, y).
        Parameters:
        x - the x-coordinate of the center of the ellipse
        y - the y-coordinate of the center of the ellipse
        semiMajorAxis - is the semimajor axis of the ellipse
        semiMinorAxis - is the semiminor axis of the ellipse
        Throws:
        IllegalArgumentException - if either semiMajorAxis or semiMinorAxis is negative
        IllegalArgumentException - if any argument is either NaN or infinite
      • filledEllipse

        public void filledEllipse​(double x,
                                  double y,
                                  double semiMajorAxis,
                                  double semiMinorAxis)
        Draws a filled ellipse with the specified semimajor and semiminor axes, centered at (x, y).
        Parameters:
        x - the x-coordinate of the center of the ellipse
        y - the y-coordinate of the center of the ellipse
        semiMajorAxis - is the semimajor axis of the ellipse
        semiMinorAxis - is the semiminor axis of the ellipse
        Throws:
        IllegalArgumentException - if either semiMajorAxis or semiMinorAxis is negative
        IllegalArgumentException - if any argument is either NaN or infinite
      • arc

        public void arc​(double x,
                        double y,
                        double radius,
                        double angle1,
                        double angle2)
        Draws a circular arc of the specified radius, centered at (x, y), from angle1 to angle2 (in degrees).
        Parameters:
        x - the x-coordinate of the center of the circle
        y - the y-coordinate of the center of the circle
        radius - the radius of the circle
        angle1 - the starting angle. 0 would mean an arc beginning at 3 o'clock.
        angle2 - the angle at the end of the arc. For example, if you want a 90 degree arc, then angle2 should be angle1 + 90.
        Throws:
        IllegalArgumentException - if radius is negative
        IllegalArgumentException - if any argument is either NaN or infinite
      • square

        public void square​(double x,
                           double y,
                           double halfLength)
        Draws a square of the specified size, centered at (x, y).
        Parameters:
        x - the x-coordinate of the center of the square
        y - the y-coordinate of the center of the square
        halfLength - one half the length of any side of the square
        Throws:
        IllegalArgumentException - if halfLength is negative
        IllegalArgumentException - if any argument is either NaN or infinite
      • filledSquare

        public void filledSquare​(double x,
                                 double y,
                                 double halfLength)
        Draws a square of the specified size, centered at (x, y).
        Parameters:
        x - the x-coordinate of the center of the square
        y - the y-coordinate of the center of the square
        halfLength - one half the length of any side of the square
        Throws:
        IllegalArgumentException - if halfLength is negative
        IllegalArgumentException - if any argument is either NaN or infinite
      • rectangle

        public void rectangle​(double x,
                              double y,
                              double halfWidth,
                              double halfHeight)
        Draws a rectangle of the specified size, centered at (x, y).
        Parameters:
        x - the x-coordinate of the center of the rectangle
        y - the y-coordinate of the center of the rectangle
        halfWidth - one half the width of the rectangle
        halfHeight - one half the height of the rectangle
        Throws:
        IllegalArgumentException - if either halfWidth or halfHeight is negative
        IllegalArgumentException - if any argument is either NaN or infinite
      • filledRectangle

        public void filledRectangle​(double x,
                                    double y,
                                    double halfWidth,
                                    double halfHeight)
        Draws a filled rectangle of the specified size, centered at (x, y).
        Parameters:
        x - the x-coordinate of the center of the rectangle
        y - the y-coordinate of the center of the rectangle
        halfWidth - one half the width of the rectangle
        halfHeight - one half the height of the rectangle
        Throws:
        IllegalArgumentException - if either halfWidth or halfHeight is negative
        IllegalArgumentException - if any argument is either NaN or infinite
      • polygon

        public void polygon​(double[] x,
                            double[] y)
        Draws a polygon with the vertices (x0, y0), (x1, y1), ..., (xn–1, yn–1).
        Parameters:
        x - an array of all the x-coordinates of the polygon
        y - an array of all the y-coordinates of the polygon
        Throws:
        IllegalArgumentException - unless x[] and y[] are of the same length
        IllegalArgumentException - if any coordinate is either NaN or infinite
        IllegalArgumentException - if either x[] or y[] is null
      • filledPolygon

        public void filledPolygon​(double[] x,
                                  double[] y)
        Draws a filled polygon with the vertices (x0, y0), (x1, y1), ..., (xn–1, yn–1).
        Parameters:
        x - an array of all the x-coordinates of the polygon
        y - an array of all the y-coordinates of the polygon
        Throws:
        IllegalArgumentException - unless x[] and y[] are of the same length
        IllegalArgumentException - if any coordinate is either NaN or infinite
        IllegalArgumentException - if either x[] or y[] is null
      • picture

        public void picture​(double x,
                            double y,
                            String filename)
        Draws the specified image centered at (x, y). The supported image formats are typically JPEG, PNG, GIF, TIFF, and BMP. As an optimization, the picture is cached, so there is no performance penalty for redrawing the same image multiple times (e.g., in an animation). However, if you change the picture file after drawing it, subsequent calls will draw the original picture.
        Parameters:
        x - the center x-coordinate of the image
        y - the center y-coordinate of the image
        filename - the name of the image/picture, e.g., "ball.gif"
        Throws:
        IllegalArgumentException - if the image filename is invalid
        IllegalArgumentException - if either x or y is either NaN or infinite
      • picture

        public void picture​(double x,
                            double y,
                            String filename,
                            double degrees)
        Draws the specified image centered at (x, y), rotated given number of degrees. The supported image formats are typically JPEG, PNG, GIF, TIFF, and BMP.
        Parameters:
        x - the center x-coordinate of the image
        y - the center y-coordinate of the image
        filename - the name of the image/picture, e.g., "ball.gif"
        degrees - is the number of degrees to rotate counterclockwise
        Throws:
        IllegalArgumentException - if the image filename is invalid
        IllegalArgumentException - if x, y, degrees is NaN or infinite
        IllegalArgumentException - if filename is null
      • picture

        public void picture​(double x,
                            double y,
                            String filename,
                            double scaledWidth,
                            double scaledHeight)
        Draws the specified image centered at (x, y), rescaled to the specified bounding box. The supported image formats are typically JPEG, PNG, GIF, TIFF, and BMP.
        Parameters:
        x - the center x-coordinate of the image
        y - the center y-coordinate of the image
        filename - the name of the image/picture, e.g., "ball.gif"
        scaledWidth - the width of the scaled image (in screen coordinates)
        scaledHeight - the height of the scaled image (in screen coordinates)
        Throws:
        IllegalArgumentException - if either scaledWidth or scaledHeight is negative
        IllegalArgumentException - if the image filename is invalid
        IllegalArgumentException - if x or y is either NaN or infinite
        IllegalArgumentException - if filename is null
      • picture

        public void picture​(double x,
                            double y,
                            String filename,
                            double scaledWidth,
                            double scaledHeight,
                            double degrees)
        Draws the specified image centered at (x, y), rotated given number of degrees, and rescaled to the specified bounding box. The supported image formats are typically JPEG, PNG, GIF, TIFF, and BMP.
        Parameters:
        x - the center x-coordinate of the image
        y - the center y-coordinate of the image
        filename - the name of the image/picture, e.g., "ball.gif"
        scaledWidth - the width of the scaled image (in screen coordinates)
        scaledHeight - the height of the scaled image (in screen coordinates)
        degrees - is the number of degrees to rotate counterclockwise
        Throws:
        IllegalArgumentException - if either scaledWidth or scaledHeight is negative
        IllegalArgumentException - if the image filename is invalid
      • text

        public void text​(double x,
                         double y,
                         String text)
        Writes the given text string in the current font, centered at (x, y).
        Parameters:
        x - the center x-coordinate of the text
        y - the center y-coordinate of the text
        text - the text to write
        Throws:
        IllegalArgumentException - if text is null
        IllegalArgumentException - if x or y is either NaN or infinite
      • text

        public void text​(double x,
                         double y,
                         String text,
                         double degrees)
        Writes the given text string in the current font, centered at (x, y) and rotated by the specified number of degrees.
        Parameters:
        x - the center x-coordinate of the text
        y - the center y-coordinate of the text
        text - the text to write
        degrees - is the number of degrees to rotate counterclockwise
        Throws:
        IllegalArgumentException - if text is null
        IllegalArgumentException - if x, y, or degrees is either NaN or infinite
      • textLeft

        public void textLeft​(double x,
                             double y,
                             String text)
        Writes the given text string in the current font, left-aligned at (x, y).
        Parameters:
        x - the x-coordinate of the text
        y - the y-coordinate of the text
        text - the text
        Throws:
        IllegalArgumentException - if text is null
        IllegalArgumentException - if x or y is either NaN or infinite
      • textRight

        public void textRight​(double x,
                              double y,
                              String text)
        Writes the given text string in the current font, right-aligned at (x, y).
        Parameters:
        x - the x-coordinate of the text
        y - the y-coordinate of the text
        text - the text to write
        Throws:
        IllegalArgumentException - if text is null
        IllegalArgumentException - if x or y is either NaN or infinite
      • pause

        public void pause​(int t)
        Pause for t milliseconds. This method is intended to support computer animations.
        Parameters:
        t - number of milliseconds
        Throws:
        IllegalArgumentException - if t is negative
      • show

        public void show()
        Copies offscreen buffer to onscreen buffer. There is no reason to call this method unless double buffering is enabled.
      • enableDoubleBuffering

        public void enableDoubleBuffering()
        Enable double buffering. All subsequent calls to drawing methods such as line(), circle(), and square() will be deferred until the next call to show(). Useful for animations.
      • disableDoubleBuffering

        public void disableDoubleBuffering()
        Disable double buffering. All subsequent calls to drawing methods such as line(), circle(), and square() will be displayed on screen when called. This is the default.
      • addListener

        public void addListener​(DrawListener listener)
        Adds a DrawListener to listen to keyboard and mouse events.
        Parameters:
        listener - the {\tt DrawListener} argument
      • isMousePressed

        public boolean isMousePressed()
        Returns true if the mouse is being pressed.
        Returns:
        true if the mouse is being pressed; false otherwise
      • mouseX

        public double mouseX()
        Returns the x-coordinate of the mouse.
        Returns:
        the x-coordinate of the mouse
      • mouseY

        public double mouseY()
        Returns the y-coordinate of the mouse.
        Returns:
        the y-coordinate of the mouse
      • hasNextKeyTyped

        public boolean hasNextKeyTyped()
        Returns true if the user has typed a key.
        Returns:
        true if the user has typed a key; false otherwise
      • nextKeyTyped

        public char nextKeyTyped()
        The next key typed by the user.
        Returns:
        the next key typed by the user
      • isKeyPressed

        public boolean isKeyPressed​(int keycode)
        Returns true if the keycode is being pressed.

        This method takes as an argument the keycode (corresponding to a physical key). It can handle action keys (such as F1 and arrow keys) and modifier keys (such as shift and control). See KeyEvent for a description of key codes.

        Parameters:
        keycode - the keycode to check
        Returns:
        true if keycode is currently being pressed; false otherwise
      • keyTyped

        public void keyTyped​(KeyEvent event)
        This method cannot be called directly.
        Specified by:
        keyTyped in interface KeyListener
      • keyPressed

        public void keyPressed​(KeyEvent event)
        This method cannot be called directly.
        Specified by:
        keyPressed in interface KeyListener
      • keyReleased

        public void keyReleased​(KeyEvent event)
        This method cannot be called directly.
        Specified by:
        keyReleased in interface KeyListener
      • enableTimer

        public void enableTimer​(int callsPerSecond)
        Sets a timer that calls update() method a specified number of times per second.

        Parameters:
        callsPerSecond - calls per second
      • disableTimer

        public void disableTimer()
      • main

        public static void main​(String[] args)
        Test client.
        Parameters:
        args - the command-line arguments