edu.princeton.cs.algs4
Class Draw
- java.lang.Object
-
- edu.princeton.cs.algs4.Draw
-
- All Implemented Interfaces:
- java.awt.event.ActionListener, java.awt.event.KeyListener, java.awt.event.MouseListener, java.awt.event.MouseMotionListener, java.util.EventListener
public final class Draw extends java.lang.Object implements java.awt.event.ActionListener, java.awt.event.MouseListener, java.awt.event.MouseMotionListener, java.awt.event.KeyListenerDraw. This class 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 indepedent drawing windows.For additional documentation, see Section 3.1 of Computer Science: An Interdisciplinary Approach by Robert Sedgewick and Kevin Wayne.
-
-
Field Summary
Fields Modifier and Type Field and Description static java.awt.ColorBLACKThe color black.static java.awt.ColorBLUEThe color blue.static java.awt.ColorBOOK_BLUEShade of blue used in Introduction to Programming in Java.static java.awt.ColorBOOK_LIGHT_BLUEShade of light blue used in Introduction to Programming in Java.static java.awt.ColorBOOK_REDShade of red used in Algorithms, 4th edition.static java.awt.ColorCYANThe color cyan.static java.awt.ColorDARK_GRAYThe color dark gray.static java.awt.ColorGRAYThe color gray.static java.awt.ColorGREENThe color green.static java.awt.ColorLIGHT_GRAYThe color light gray.static java.awt.ColorMAGENTAThe color magenta.static java.awt.ColorORANGEThe color orange.static java.awt.ColorPINKThe color pink.static java.awt.ColorPRINCETON_ORANGEShade of orange used in Princeton's identity.static java.awt.ColorREDThe color red.static java.awt.ColorWHITEThe color white.static java.awt.ColorYELLOWThe color yellow.
-
Constructor Summary
Constructors Constructor and Description Draw()Initializes an empty drawing object.Draw(java.lang.String name)Initializes an empty drawing object with the given name.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Deprecated Methods Modifier and Type Method and Description voidactionPerformed(java.awt.event.ActionEvent e)This method cannot be called directly.voidaddListener(DrawListener listener)Adds aDrawListenerto listen to keyboard and mouse events.voidarc(double x, double y, double r, double angle1, double angle2)Draws an arc of radius r, centered on (x, y), from angle1 to angle2 (in degrees).voidcircle(double x, double y, double r)Draws a circle of radius r, centered on (x, y).voidclear()Clears the screen to the default color (white).voidclear(java.awt.Color color)Clears the screen to the given color.voiddisableDoubleBuffering()Disable double buffering.voidellipse(double x, double y, double semiMajorAxis, double semiMinorAxis)Draws an ellipse with given semimajor and semiminor axes, centered on (x, y).voidenableDoubleBuffering()Enable double buffering.voidfilledCircle(double x, double y, double r)Draws a filled circle of radius r, centered on (x, y).voidfilledEllipse(double x, double y, double semiMajorAxis, double semiMinorAxis)Draws an ellipse with given semimajor and semiminor axes, centered on (x, y).voidfilledPolygon(double[] x, double[] y)Draws a filled polygon with the given (x[i], y[i]) coordinates.voidfilledRectangle(double x, double y, double halfWidth, double halfHeight)Draws a filled rectangle of given half width and half height, centered on (x, y).voidfilledSquare(double x, double y, double r)Draws a filled square of side length 2r, centered on (x, y).java.awt.FontgetFont()Gets the current font.javax.swing.JLabelgetJLabel()Gets the currentJLabelfor use in some other GUI.java.awt.ColorgetPenColor()Gets the current pen color.doublegetPenRadius()Gets the current pen radius.booleanhasNextKeyTyped()Returns true if the user has typed a key.booleanisKeyPressed(int keycode)Returns true if the keycode is being pressed.booleanisMousePressed()Returns true if the mouse is being pressed.voidkeyPressed(java.awt.event.KeyEvent e)This method cannot be called directly.voidkeyReleased(java.awt.event.KeyEvent e)This method cannot be called directly.voidkeyTyped(java.awt.event.KeyEvent e)This method cannot be called directly.voidline(double x0, double y0, double x1, double y1)Draws a line from (x0, y0) to (x1, y1).static voidmain(java.lang.String[] args)Test client.voidmouseClicked(java.awt.event.MouseEvent e)This method cannot be called directly.voidmouseDragged(java.awt.event.MouseEvent e)This method cannot be called directly.voidmouseEntered(java.awt.event.MouseEvent e)This method cannot be called directly.voidmouseExited(java.awt.event.MouseEvent e)This method cannot be called directly.voidmouseMoved(java.awt.event.MouseEvent e)This method cannot be called directly.booleanmousePressed()Deprecated.replaced byisMousePressed()voidmousePressed(java.awt.event.MouseEvent e)This method cannot be called directly.voidmouseReleased(java.awt.event.MouseEvent e)This method cannot be called directly.doublemouseX()Returns the x-coordinate of the mouse.doublemouseY()Returns the y-coordinate of the mouse.charnextKeyTyped()The next key typed by the user.voidpause(int t)Pause for t milliseconds.voidpicture(double x, double y, java.lang.String filename)Draws picture (gif, jpg, or png) centered on (x, y).voidpicture(double x, double y, java.lang.String filename, double degrees)Draws picture (gif, jpg, or png) centered on (x, y), rotated given number of degrees.voidpicture(double x, double y, java.lang.String filename, double w, double h)Draws picture (gif, jpg, or png) centered on (x, y), rescaled to w-by-h.voidpicture(double x, double y, java.lang.String filename, double w, double h, double degrees)Draws picture (gif, jpg, or png) centered on (x, y), rotated given number of degrees, rescaled to w-by-h.voidpoint(double x, double y)Draws a point at (x, y).voidpolygon(double[] x, double[] y)Draws a polygon with the given (x[i], y[i]) coordinates.voidrectangle(double x, double y, double halfWidth, double halfHeight)Draws a rectangle of given half width and half height, centered on (x, y).voidsave(java.lang.String filename)Saves this drawing to a file.voidsetCanvasSize(int canvasWidth, int canvasHeight)Sets the canvas (drawing area) to be width-by-height pixels.voidsetDefaultCloseOperation(int value)Sets the default close operation.voidsetFont()Sets the font to the default font (sans serif, 16 point).voidsetFont(java.awt.Font font)Sets the font to the given value.voidsetLocationOnScreen(int x, int y)Sets the upper-left hand corner of the drawing window to be (x, y), where (0, 0) is upper left.voidsetPenColor()Sets the pen color to the default color (black).voidsetPenColor(java.awt.Color color)Sets the pen color to the given color.voidsetPenColor(int red, int green, int blue)Sets the pen color to the given RGB color.voidsetPenRadius()Sets the pen size to the default (.002).voidsetPenRadius(double r)Sets the radius of the pen to the given size.voidsetXscale()Sets the x-scale to be the default (between 0.0 and 1.0).voidsetXscale(double min, double max)Sets the x-scale.voidsetYscale()Sets the y-scale to be the default (between 0.0 and 1.0).voidsetYscale(double min, double max)Sets the y-scale.voidshow()Copies offscreen buffer to onscreen buffer.voidshow(int t)Deprecated.replaced byenableDoubleBuffering(),show(), andpause(int t)voidsquare(double x, double y, double r)Draws a square of side length 2r, centered on (x, y).voidtext(double x, double y, java.lang.String s)Writes the given text string in the current font, centered on (x, y).voidtext(double x, double y, java.lang.String s, double degrees)Writes the given text string in the current font, centered on (x, y) and rotated by the specified number of degrees.voidtextLeft(double x, double y, java.lang.String s)Writes the given text string in the current font, left-aligned at (x, y).voidxorOff()Turns off xor mode.voidxorOn()Turns on xor mode.
-
-
-
Field Detail
-
BLACK
public static final java.awt.Color BLACK
The color black.
-
BLUE
public static final java.awt.Color BLUE
The color blue.
-
CYAN
public static final java.awt.Color CYAN
The color cyan.
-
DARK_GRAY
public static final java.awt.Color DARK_GRAY
The color dark gray.
-
GRAY
public static final java.awt.Color GRAY
The color gray.
-
GREEN
public static final java.awt.Color GREEN
The color green.
-
LIGHT_GRAY
public static final java.awt.Color LIGHT_GRAY
The color light gray.
-
MAGENTA
public static final java.awt.Color MAGENTA
The color magenta.
-
ORANGE
public static final java.awt.Color ORANGE
The color orange.
-
PINK
public static final java.awt.Color PINK
The color pink.
-
RED
public static final java.awt.Color RED
The color red.
-
WHITE
public static final java.awt.Color WHITE
The color white.
-
YELLOW
public static final java.awt.Color YELLOW
The color yellow.
-
BOOK_BLUE
public static final java.awt.Color BOOK_BLUE
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 java.awt.Color BOOK_LIGHT_BLUE
Shade of light blue used in Introduction to Programming in Java. The RGB values are approximately (103, 198, 243).
-
BOOK_RED
public static final java.awt.Color BOOK_RED
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 java.awt.Color PRINCETON_ORANGE
Shade of orange used in Princeton's identity. It is PMS 158. The RGB values are approximately (245, 128, 37).
-
-
Constructor Detail
-
Draw
public Draw(java.lang.String name)
Initializes an empty drawing object with the given name.- Parameters:
name- the title of the drawing window.
-
Draw
public Draw()
Initializes an empty drawing object.
-
-
Method Detail
-
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 lefty- the number of pixels from the top- Throws:
java.lang.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, typicallyJFrame.EXIT_ON_CLOSE(close all windows) orJFrame.DISPOSE_ON_CLOSE(close current window)
-
setCanvasSize
public void setCanvasSize(int canvasWidth, int canvasHeight)Sets the canvas (drawing area) to be width-by-height pixels. This also erases the current drawing and resets the coordinate system, pen radius, pen color, and font back to their default values. Ordinarly, this method is called once, at the very beginning of a program.- Parameters:
canvasWidth- the width as a number of pixelscanvasHeight- the height as a number of pixels- Throws:
java.lang.IllegalArgumentException- unless bothcanvasWidthandcanvasHeightare positive
-
setXscale
public void setXscale()
Sets the x-scale to be the default (between 0.0 and 1.0).
-
setYscale
public void setYscale()
Sets the y-scale to be the default (between 0.0 and 1.0).
-
setXscale
public void setXscale(double min, double max)Sets the x-scale.- Parameters:
min- the minimum value of the x-scalemax- the maximum value of the x-scale
-
setYscale
public void setYscale(double min, double max)Sets the y-scale.- Parameters:
min- the minimum value of the y-scalemax- the maximum value of the y-scale
-
clear
public void clear()
Clears the screen to the default color (white).
-
clear
public void clear(java.awt.Color color)
Clears the screen to the given color.- Parameters:
color- the color to make the background
-
getPenRadius
public double getPenRadius()
Gets the current pen radius.- Returns:
- the current pen radius
-
setPenRadius
public void setPenRadius()
Sets the pen size to the default (.002).
-
setPenRadius
public void setPenRadius(double r)
Sets the radius of the pen to the given size.- Parameters:
r- the radius of the pen- Throws:
java.lang.IllegalArgumentException- if r is negative
-
getPenColor
public java.awt.Color getPenColor()
Gets the current pen color.- Returns:
- the current pen color
-
setPenColor
public void setPenColor()
Sets the pen color to the default color (black).
-
setPenColor
public void setPenColor(java.awt.Color color)
Sets the pen color to the given color.- Parameters:
color- the color to make the pen
-
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:
java.lang.IllegalArgumentException- if the amount of red, green, or blue are outside prescribed range
-
xorOn
public void xorOn()
Turns on xor mode.
-
xorOff
public void xorOff()
Turns off xor mode.
-
getJLabel
public javax.swing.JLabel getJLabel()
Gets the currentJLabelfor use in some other GUI.- Returns:
- the current
JLabel
-
getFont
public java.awt.Font getFont()
Gets 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(java.awt.Font font)
Sets the font to the given value.- Parameters:
font- the font
-
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 pointy0- the y-coordinate of the starting pointx1- the x-coordinate of the destination pointy1- the y-coordinate of the destination point
-
point
public void point(double x, double y)Draws a point at (x, y).- Parameters:
x- the x-coordinate of the pointy- the y-coordinate of the point
-
circle
public void circle(double x, double y, double r)Draws a circle of radius r, centered on (x, y).- Parameters:
x- the x-coordinate of the center of the circley- the y-coordinate of the center of the circler- the radius of the circle- Throws:
java.lang.IllegalArgumentException- if the radius of the circle is negative
-
filledCircle
public void filledCircle(double x, double y, double r)Draws a filled circle of radius r, centered on (x, y).- Parameters:
x- the x-coordinate of the center of the circley- the y-coordinate of the center of the circler- the radius of the circle- Throws:
java.lang.IllegalArgumentException- if the radius of the circle is negative
-
ellipse
public void ellipse(double x, double y, double semiMajorAxis, double semiMinorAxis)Draws an ellipse with given semimajor and semiminor axes, centered on (x, y).- Parameters:
x- the x-coordinate of the center of the ellipsey- the y-coordinate of the center of the ellipsesemiMajorAxis- is the semimajor axis of the ellipsesemiMinorAxis- is the semiminor axis of the ellipse- Throws:
java.lang.IllegalArgumentException- if either of the axes are negative
-
filledEllipse
public void filledEllipse(double x, double y, double semiMajorAxis, double semiMinorAxis)Draws an ellipse with given semimajor and semiminor axes, centered on (x, y).- Parameters:
x- the x-coordinate of the center of the ellipsey- the y-coordinate of the center of the ellipsesemiMajorAxis- is the semimajor axis of the ellipsesemiMinorAxis- is the semiminor axis of the ellipse- Throws:
java.lang.IllegalArgumentException- if either of the axes are negative
-
arc
public void arc(double x, double y, double r, double angle1, double angle2)Draws an arc of radius r, centered on (x, y), from angle1 to angle2 (in degrees).- Parameters:
x- the x-coordinate of the center of the circley- the y-coordinate of the center of the circler- the radius of the circleangle1- 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:
java.lang.IllegalArgumentException- if the radius of the circle is negative
-
square
public void square(double x, double y, double r)Draws a square of side length 2r, centered on (x, y).- Parameters:
x- the x-coordinate of the center of the squarey- the y-coordinate of the center of the squarer- radius is half the length of any side of the square- Throws:
java.lang.IllegalArgumentException- if r is negative
-
filledSquare
public void filledSquare(double x, double y, double r)Draws a filled square of side length 2r, centered on (x, y).- Parameters:
x- the x-coordinate of the center of the squarey- the y-coordinate of the center of the squarer- radius is half the length of any side of the square- Throws:
java.lang.IllegalArgumentException- if r is negative
-
rectangle
public void rectangle(double x, double y, double halfWidth, double halfHeight)Draws a rectangle of given half width and half height, centered on (x, y).- Parameters:
x- the x-coordinate of the center of the rectangley- the y-coordinate of the center of the rectanglehalfWidth- is half the width of the rectanglehalfHeight- is half the height of the rectangle- Throws:
java.lang.IllegalArgumentException- if halfWidth or halfHeight is negative
-
filledRectangle
public void filledRectangle(double x, double y, double halfWidth, double halfHeight)Draws a filled rectangle of given half width and half height, centered on (x, y).- Parameters:
x- the x-coordinate of the center of the rectangley- the y-coordinate of the center of the rectanglehalfWidth- is half the width of the rectanglehalfHeight- is half the height of the rectangle- Throws:
java.lang.IllegalArgumentException- if halfWidth or halfHeight is negative
-
polygon
public void polygon(double[] x, double[] y)Draws a polygon with the given (x[i], y[i]) coordinates.- Parameters:
x- an array of all the x-coordindates of the polygony- an array of all the y-coordindates of the polygon
-
filledPolygon
public void filledPolygon(double[] x, double[] y)Draws a filled polygon with the given (x[i], y[i]) coordinates.- Parameters:
x- an array of all the x-coordindates of the polygony- an array of all the y-coordindates of the polygon
-
picture
public void picture(double x, double y, java.lang.String filename)Draws picture (gif, jpg, or png) centered on (x, y).- Parameters:
x- the center x-coordinate of the imagey- the center y-coordinate of the imagefilename- the name of the image/picture, e.g., "ball.gif"- Throws:
java.lang.IllegalArgumentException- if the image is corruptjava.lang.IllegalArgumentException- iffilenameisnull
-
picture
public void picture(double x, double y, java.lang.String filename, double degrees)Draws picture (gif, jpg, or png) centered on (x, y), rotated given number of degrees.- Parameters:
x- the center x-coordinate of the imagey- the center y-coordinate of the imagefilename- the name of the image/picture, e.g., "ball.gif"degrees- is the number of degrees to rotate counterclockwise- Throws:
java.lang.IllegalArgumentException- if the image is corruptjava.lang.IllegalArgumentException- iffilenameisnull
-
picture
public void picture(double x, double y, java.lang.String filename, double w, double h)Draws picture (gif, jpg, or png) centered on (x, y), rescaled to w-by-h.- Parameters:
x- the center x coordinate of the imagey- the center y coordinate of the imagefilename- the name of the image/picture, e.g., "ball.gif"w- the width of the imageh- the height of the image- Throws:
java.lang.IllegalArgumentException- if the image is corruptjava.lang.IllegalArgumentException- iffilenameisnull
-
picture
public void picture(double x, double y, java.lang.String filename, double w, double h, double degrees)Draws picture (gif, jpg, or png) centered on (x, y), rotated given number of degrees, rescaled to w-by-h.- Parameters:
x- the center x-coordinate of the imagey- the center y-coordinate of the imagefilename- the name of the image/picture, e.g., "ball.gif"w- the width of the imageh- the height of the imagedegrees- is the number of degrees to rotate counterclockwise- Throws:
java.lang.IllegalArgumentException- if the image is corruptjava.lang.IllegalArgumentException- iffilenameisnull
-
text
public void text(double x, double y, java.lang.String s)Writes the given text string in the current font, centered on (x, y).- Parameters:
x- the center x-coordinate of the texty- the center y-coordinate of the texts- the text
-
text
public void text(double x, double y, java.lang.String s, double degrees)Writes the given text string in the current font, centered on (x, y) and rotated by the specified number of degrees.- Parameters:
x- the center x-coordinate of the texty- the center y-coordinate of the texts- the textdegrees- is the number of degrees to rotate counterclockwise
-
textLeft
public void textLeft(double x, double y, java.lang.String s)Writes the given text string in the current font, left-aligned at (x, y).- Parameters:
x- the x-coordinate of the texty- the y-coordinate of the texts- the text
-
show
@Deprecated public void show(int t)
Deprecated. replaced byenableDoubleBuffering(),show(), andpause(int t)Copies the offscreen buffer to the onscreen buffer, pauses for t milliseconds and enables double buffering.- Parameters:
t- number of milliseconds
-
pause
public void pause(int t)
Pause for t milliseconds. This method is intended to support computer animations.- Parameters:
t- number of milliseconds
-
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 asline(),circle(), andsquare()will be deffered until the next call to show(). Useful for animations.
-
disableDoubleBuffering
public void disableDoubleBuffering()
Disable double buffering. All subsequent calls to drawing methods such asline(),circle(), andsquare()will be displayed on screen when called. This is the default.
-
save
public void save(java.lang.String filename)
Saves this drawing to a file.- Parameters:
filename- the name of the file (with suffix png, jpg, or gif)
-
actionPerformed
public void actionPerformed(java.awt.event.ActionEvent e)
This method cannot be called directly.- Specified by:
actionPerformedin interfacejava.awt.event.ActionListener
-
addListener
public void addListener(DrawListener listener)
Adds aDrawListenerto 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:
trueif the mouse is being pressed;falseotherwise
-
mousePressed
@Deprecated public boolean mousePressed()
Deprecated. replaced byisMousePressed()Returns true if the mouse is being pressed.- Returns:
trueif the mouse is being pressed;falseotherwise
-
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
-
mouseClicked
public void mouseClicked(java.awt.event.MouseEvent e)
This method cannot be called directly.- Specified by:
mouseClickedin interfacejava.awt.event.MouseListener
-
mouseEntered
public void mouseEntered(java.awt.event.MouseEvent e)
This method cannot be called directly.- Specified by:
mouseEnteredin interfacejava.awt.event.MouseListener
-
mouseExited
public void mouseExited(java.awt.event.MouseEvent e)
This method cannot be called directly.- Specified by:
mouseExitedin interfacejava.awt.event.MouseListener
-
mousePressed
public void mousePressed(java.awt.event.MouseEvent e)
This method cannot be called directly.- Specified by:
mousePressedin interfacejava.awt.event.MouseListener
-
mouseReleased
public void mouseReleased(java.awt.event.MouseEvent e)
This method cannot be called directly.- Specified by:
mouseReleasedin interfacejava.awt.event.MouseListener
-
mouseDragged
public void mouseDragged(java.awt.event.MouseEvent e)
This method cannot be called directly.- Specified by:
mouseDraggedin interfacejava.awt.event.MouseMotionListener
-
mouseMoved
public void mouseMoved(java.awt.event.MouseEvent e)
This method cannot be called directly.- Specified by:
mouseMovedin interfacejava.awt.event.MouseMotionListener
-
hasNextKeyTyped
public boolean hasNextKeyTyped()
Returns true if the user has typed a key.- Returns:
trueif the user has typed a key;falseotherwise
-
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
KeyEventfor a description of key codes.- Parameters:
keycode- the keycode to check- Returns:
trueifkeycodeis currently being pressed;falseotherwise
-
keyTyped
public void keyTyped(java.awt.event.KeyEvent e)
This method cannot be called directly.- Specified by:
keyTypedin interfacejava.awt.event.KeyListener
-
keyPressed
public void keyPressed(java.awt.event.KeyEvent e)
This method cannot be called directly.- Specified by:
keyPressedin interfacejava.awt.event.KeyListener
-
keyReleased
public void keyReleased(java.awt.event.KeyEvent e)
This method cannot be called directly.- Specified by:
keyReleasedin interfacejava.awt.event.KeyListener
-
main
public static void main(java.lang.String[] args)
Test client.- Parameters:
args- the command-line arguments
-
-
DataMelt 3.0 © DataMelt by jWork.ORG