graphics –graphical spreadsheets –java pixels and coordinate system –objecteditor shapes java...

25
Graphics • Graphics – Graphical Spreadsheets – Java Pixels and Coordinate System – ObjectEditor Shapes • Java Vectors – Variable-Sized Instances • Java Enumeration

Upload: abdiel-sowell

Post on 14-Dec-2015

229 views

Category:

Documents


3 download

TRANSCRIPT

Graphics

• Graphics– Graphical Spreadsheets– Java Pixels and Coordinate System– ObjectEditor Shapes

• Java Vectors– Variable-Sized Instances

• Java Enumeration

A Square With Text

Java Coordinate System

Y

X(0,0)

(3,2)

pixels

Describing Shapes

x1, y1

x3, y3

x2, y2

w1

h1

w3

h3

w2

h2

Bounding Rectangle

hello

x4, y4

w4

h4

A Square With Text

import shapes.RectangleModel;import shapes.TextModel;public interface SquareWithText {

public RectangleModel getSquare(); public void setSquare(RectangleModel newVal); public TextModel getText ();

}

A Square With Textimport shapes.RectangleModelimport shapes.TextModelpublic class ASquareWithText implements SquareWithText { RectangleModel square; TextModel text; … // constant declarations public ASquareWithText() {

square = new RectangleModel (INIT_X, INIT_Y, INIT_SIDE_LENGTH, INIT_SIDE_LENGTH);

text = new TextModel(TEXT_STRING);placeText();

}void placeText() {text.setCenter(square.getCenter());}public RectangleModel getSquare () {return square;}public void setSquare (RectangleModel newVal) {

square = newVal;placeText();

}

public TextModel getText () {return text};}}

w2

h2

x2, y2

x3, y3

w3

h3

ObjectEditor Classes

x1, y1

w1

h1

Bounding Rectangle

hello

x4, y4

w4

h4x5, y5

RectangleModel r = new RectangleModel(x1, y1, h1,w1)OvalModel r = new OvalModel(x3, y3, h3,w3)

LineModel r = new LineModel(x2, y2, h2,w2)TextModel r = new TextModel(x4, y4, h4,w4)

PointModel r = new PointModel(x5,y5))

AWT Classes

x1, y1

w1

h1x5, y5

Rectangle r = new Rectangle(x1, y1, h1,w1)

Point r = new Point(x5, y5))

r.x x1r.x = x4p.x x1

Dimension d = r.getSize()

w1d.widthPoint p = r.getLocation()

ObjectEditor Vs AWT Classes

Methods on ObjectEditor Classes getX(), setX(), getY(), setY(), getWidth(), setWidth(), getHeight(), setHeight. getCenter(), setCenter(), getNWCorner(), setNWCorner(), getNECorner(), setNECorner(), getSWCorner(), setSWCorner(), getSECorner(), setSECorner(),. isFilled(), setFilled() getColor(), setColor()

Shapes Demo

Plotting Points

Variable-Size Collection

History

Elements accessed by ObjectEditorConventions for exporting elements

Conventions for Variable-Sized Collection

import shapes.PointModel;public interface PointHistory {

public void addElement (int x, int y);public PointModel elementAt (int

index); public int size();

}

Arbitrary Type.

Read methods

Write method

Read Vs Write Methods

• Read Methods– Used to get components of object– Getter methods– size(), addElement()

• Write Methods– Used to change components of object– Setter methods– addElement(), deleteElement(), replaceElement()

• Distinction independent of Conventions

nullVector Instance

Vectors (java.util.Vector)Vector v;

James Dean

Joe Doe

ALoan Instance

v = new Vector();v.addElement(“James Dean”)v.addElement(“Joe Doe”)

v.addElement(new ALoan())

Vector Instance

v.addElement(new Vector())

v.addElement(5)

Object

Methods of Class Vector public final int size() public final Object elementAt(int index) public final void addElement(Object obj) public final void setElementAt(Object obj, int index) public final void insertElementAt(Object obj, int index) public final boolean removeElement(Object obj) public final void removeElementAt(int index) public final int indexOf(Object obj) public final Enumeration elements()

Methods of Interface Enumeration (java.util.Enumeration)

public boolean hasMoreElements(); public Object nextElement();

Enumeration elements = vector.elements();while ( elements.hasMoreElements()) System.out.println(elements.nextElement();

Methods of Interface Enumeration (java.util.Enumeration)

public boolean hasMoreElements(); public Object nextElement();

for (Enumeration elements = vector.elements(); elements.hasMoreElements();) System.out.println(elements.nextElement();

Point history user

null

Using Vector Directly as Point History

Vector v = new Vector();

v.addElement(new APointModel(0,0);

PointModelInstancePointModelInstance

v.removeElementAt(0);

Vector Instance

addElement(): Object void

elementAt(): index Object

removeElementAt(): Object void

v.addElement(new APointModel(10,90);v.addElement(new Vector());

Violating Least Privilege

size(): intVector Instance

Point history user

APointHistory instance

elementAt(): index PointModel

addElement(): int*int void

size(): int

null

Encapsulating Vector in APointHistory

Vector v = new Vector();

PointModelInstance

PointHistory pointHistory = new APointHistory();

pointHistory.addElement(0,0);pointHistory.addElement(new Vector())

addElement(): Object void

elementAt(): index Object

removeElementAt(): Object void

size(): intVector Instance

APointHistory Implementation

import java.util.Vector;public class APointHistory implements PointHistory {

Vector contents = new Vector();public void addElement (int x, int y) {

contents.addElement(new PointModel(x, y));}public PointModel elementAt (int index) {

return (PointModel) contents.elementAt(index);}public int size() {

return contents.size();}

}

Animation

Animating point

Creating Animating Point

static final int ANIMATING_POINT_X = 0, ANIMATING_POINT_Y = 0;PointModel animatingPoint = new PointModel

(ANIMATING_POINT_X, ANIMATING_POINT_Y);public PointModel getAnimatingPoint() {

return animatingPoint;}

Animating the Point

public void animate () { Enumeration points = contents.elements(); while (points.hasMoreElements()) {

animatingPoint.setCenter( ((PointModel) points.nextElement()).getCenter()); } animatingPoint.setX(ANIMATING_POINT_X); animatingPoint.setY(ANIMATING_POINT_Y);}

Animating the Pointpublic synchronized void animate () { Enumeration points = contents.elements(); while (points.hasMoreElements()) {

animatingPoint.setCenter( ((PointModel) points.nextElement()).getCenter());

try {Thread.sleep(ANIMATION_DELAY);

} catch (InterruptedException e) {System.out.println("Animation interrupted");

} } animatingPoint.setX(ANIMATING_POINT_X); animatingPoint.setY(ANIMATING_POINT_Y);}