Java2D - University of Exeterempslocal.ex.ac.uk/people/staff/pjk205/ECM2410/slides03.pdf · Basics...

143
ECM2410: Graphics and Animation Java 2D Java 2D 1/17

Transcript of Java2D - University of Exeterempslocal.ex.ac.uk/people/staff/pjk205/ECM2410/slides03.pdf · Basics...

Page 1: Java2D - University of Exeterempslocal.ex.ac.uk/people/staff/pjk205/ECM2410/slides03.pdf · Basics Java 2D 2/17. Java2DBasics Device Output is to a Frame ... (Graphics g) {// Work

ECM2410: Graphics and Animation

Java 2D

Java 2D 1/17

Page 2: Java2D - University of Exeterempslocal.ex.ac.uk/people/staff/pjk205/ECM2410/slides03.pdf · Basics Java 2D 2/17. Java2DBasics Device Output is to a Frame ... (Graphics g) {// Work

Java 2D Basics

Device

Output is to a FrameFrame is the ‘window’ of window managers andMicrosoft.Output can also be drawn to a Component, JComponent,etc or an image.

paint()

Each object to be drawn has a paint() method, which iscalled to draw the object.

Simple

In simple programs all work is done by a single paint().

Basics Java 2D 2/17

Page 3: Java2D - University of Exeterempslocal.ex.ac.uk/people/staff/pjk205/ECM2410/slides03.pdf · Basics Java 2D 2/17. Java2DBasics Device Output is to a Frame ... (Graphics g) {// Work

Java 2D Basics

Device

Output is to a FrameFrame is the ‘window’ of window managers andMicrosoft.Output can also be drawn to a Component, JComponent,etc or an image.

paint()

Each object to be drawn has a paint() method, which iscalled to draw the object.

Simple

In simple programs all work is done by a single paint().

Basics Java 2D 2/17

Page 4: Java2D - University of Exeterempslocal.ex.ac.uk/people/staff/pjk205/ECM2410/slides03.pdf · Basics Java 2D 2/17. Java2DBasics Device Output is to a Frame ... (Graphics g) {// Work

Java 2D Basics

Device

Output is to a FrameFrame is the ‘window’ of window managers andMicrosoft.Output can also be drawn to a Component, JComponent,etc or an image.

paint()

Each object to be drawn has a paint() method, which iscalled to draw the object.

Simple

In simple programs all work is done by a single paint().

Basics Java 2D 2/17

Page 5: Java2D - University of Exeterempslocal.ex.ac.uk/people/staff/pjk205/ECM2410/slides03.pdf · Basics Java 2D 2/17. Java2DBasics Device Output is to a Frame ... (Graphics g) {// Work

Java 2D Basics

Device

Output is to a FrameFrame is the ‘window’ of window managers andMicrosoft.Output can also be drawn to a Component, JComponent,etc or an image.

paint()

Each object to be drawn has a paint() method, which iscalled to draw the object.

Simple

In simple programs all work is done by a single paint().

Basics Java 2D 2/17

Page 6: Java2D - University of Exeterempslocal.ex.ac.uk/people/staff/pjk205/ECM2410/slides03.pdf · Basics Java 2D 2/17. Java2DBasics Device Output is to a Frame ... (Graphics g) {// Work

Java 2D Basics

Device

Output is to a FrameFrame is the ‘window’ of window managers andMicrosoft.Output can also be drawn to a Component, JComponent,etc or an image.

paint()

Each object to be drawn has a paint() method, which iscalled to draw the object.

Simple

In simple programs all work is done by a single paint().

Basics Java 2D 2/17

Page 7: Java2D - University of Exeterempslocal.ex.ac.uk/people/staff/pjk205/ECM2410/slides03.pdf · Basics Java 2D 2/17. Java2DBasics Device Output is to a Frame ... (Graphics g) {// Work

Java 2D Basics

Device

Output is to a FrameFrame is the ‘window’ of window managers andMicrosoft.Output can also be drawn to a Component, JComponent,etc or an image.

paint()

Each object to be drawn has a paint() method, which iscalled to draw the object.

Simple

In simple programs all work is done by a single paint().

Basics Java 2D 2/17

Page 8: Java2D - University of Exeterempslocal.ex.ac.uk/people/staff/pjk205/ECM2410/slides03.pdf · Basics Java 2D 2/17. Java2DBasics Device Output is to a Frame ... (Graphics g) {// Work

Java 2D Basics

Device

Output is to a FrameFrame is the ‘window’ of window managers andMicrosoft.Output can also be drawn to a Component, JComponent,etc or an image.

paint()

Each object to be drawn has a paint() method, which iscalled to draw the object.

Simple

In simple programs all work is done by a single paint().

Basics Java 2D 2/17

Page 9: Java2D - University of Exeterempslocal.ex.ac.uk/people/staff/pjk205/ECM2410/slides03.pdf · Basics Java 2D 2/17. Java2DBasics Device Output is to a Frame ... (Graphics g) {// Work

Java 2D Basics

Device

Output is to a FrameFrame is the ‘window’ of window managers andMicrosoft.Output can also be drawn to a Component, JComponent,etc or an image.

paint()

Each object to be drawn has a paint() method, which iscalled to draw the object.

Simple

In simple programs all work is done by a single paint().

Basics Java 2D 2/17

Page 10: Java2D - University of Exeterempslocal.ex.ac.uk/people/staff/pjk205/ECM2410/slides03.pdf · Basics Java 2D 2/17. Java2DBasics Device Output is to a Frame ... (Graphics g) {// Work

Java 2D Basics

Device

Output is to a FrameFrame is the ‘window’ of window managers andMicrosoft.Output can also be drawn to a Component, JComponent,etc or an image.

paint()

Each object to be drawn has a paint() method, which iscalled to draw the object.

Simple

In simple programs all work is done by a single paint().

Basics Java 2D 2/17

Page 11: Java2D - University of Exeterempslocal.ex.ac.uk/people/staff/pjk205/ECM2410/slides03.pdf · Basics Java 2D 2/17. Java2DBasics Device Output is to a Frame ... (Graphics g) {// Work

Object Hierarchy

java.lang.Object.Object

java.lang.awt.Component Abstract super-class – implementedby buttons, scrollbars, canvases etc

java.lang.awt.Container Holds Components

java.lang.awt.Window No borders, menubars.Also JComponent

java.lang.awt.Frame Title and borderjava.lang.awt.Frame.paint()

Invoked to redraw Component

Components/Containers receive events from window manager

Sub-class paint() methods invoked to redraw Component

Basics Java 2D 3/17

Page 12: Java2D - University of Exeterempslocal.ex.ac.uk/people/staff/pjk205/ECM2410/slides03.pdf · Basics Java 2D 2/17. Java2DBasics Device Output is to a Frame ... (Graphics g) {// Work

Object Hierarchy

java.lang.Object.Object

java.lang.awt.Component Abstract super-class – implementedby buttons, scrollbars, canvases etc

java.lang.awt.Container Holds Components

java.lang.awt.Window No borders, menubars.Also JComponent

java.lang.awt.Frame Title and borderjava.lang.awt.Frame.paint()

Invoked to redraw Component

Components/Containers receive events from window manager

Sub-class paint() methods invoked to redraw Component

Basics Java 2D 3/17

Page 13: Java2D - University of Exeterempslocal.ex.ac.uk/people/staff/pjk205/ECM2410/slides03.pdf · Basics Java 2D 2/17. Java2DBasics Device Output is to a Frame ... (Graphics g) {// Work

Object Hierarchy

java.lang.Object.Object

java.lang.awt.Component Abstract super-class – implementedby buttons, scrollbars, canvases etc

java.lang.awt.Container Holds Components

java.lang.awt.Window No borders, menubars.Also JComponent

java.lang.awt.Frame Title and borderjava.lang.awt.Frame.paint()

Invoked to redraw Component

Components/Containers receive events from window manager

Sub-class paint() methods invoked to redraw Component

Basics Java 2D 3/17

Page 14: Java2D - University of Exeterempslocal.ex.ac.uk/people/staff/pjk205/ECM2410/slides03.pdf · Basics Java 2D 2/17. Java2DBasics Device Output is to a Frame ... (Graphics g) {// Work

Object Hierarchy

java.lang.Object.Object

java.lang.awt.Component Abstract super-class – implementedby buttons, scrollbars, canvases etc

java.lang.awt.Container Holds Components

java.lang.awt.Window No borders, menubars.Also JComponent

java.lang.awt.Frame Title and borderjava.lang.awt.Frame.paint()

Invoked to redraw Component

Components/Containers receive events from window manager

Sub-class paint() methods invoked to redraw Component

Basics Java 2D 3/17

Page 15: Java2D - University of Exeterempslocal.ex.ac.uk/people/staff/pjk205/ECM2410/slides03.pdf · Basics Java 2D 2/17. Java2DBasics Device Output is to a Frame ... (Graphics g) {// Work

Object Hierarchy

java.lang.Object.Object

java.lang.awt.Component Abstract super-class – implementedby buttons, scrollbars, canvases etc

java.lang.awt.Container Holds Components

java.lang.awt.Window No borders, menubars.Also JComponent

java.lang.awt.Frame Title and borderjava.lang.awt.Frame.paint()

Invoked to redraw Component

Components/Containers receive events from window manager

Sub-class paint() methods invoked to redraw Component

Basics Java 2D 3/17

Page 16: Java2D - University of Exeterempslocal.ex.ac.uk/people/staff/pjk205/ECM2410/slides03.pdf · Basics Java 2D 2/17. Java2DBasics Device Output is to a Frame ... (Graphics g) {// Work

Object Hierarchy

java.lang.Object.Object

java.lang.awt.Component Abstract super-class – implementedby buttons, scrollbars, canvases etc

java.lang.awt.Container Holds Components

java.lang.awt.Window No borders, menubars.Also JComponent

java.lang.awt.Frame Title and borderjava.lang.awt.Frame.paint()

Invoked to redraw Component

Components/Containers receive events from window manager

Sub-class paint() methods invoked to redraw Component

Basics Java 2D 3/17

Page 17: Java2D - University of Exeterempslocal.ex.ac.uk/people/staff/pjk205/ECM2410/slides03.pdf · Basics Java 2D 2/17. Java2DBasics Device Output is to a Frame ... (Graphics g) {// Work

Object Hierarchy

java.lang.Object.Object

java.lang.awt.Component Abstract super-class – implementedby buttons, scrollbars, canvases etc

java.lang.awt.Container Holds Components

java.lang.awt.Window No borders, menubars.Also JComponent

java.lang.awt.Frame Title and borderjava.lang.awt.Frame.paint()

Invoked to redraw Component

Components/Containers receive events from window manager

Sub-class paint() methods invoked to redraw Component

Basics Java 2D 3/17

Page 18: Java2D - University of Exeterempslocal.ex.ac.uk/people/staff/pjk205/ECM2410/slides03.pdf · Basics Java 2D 2/17. Java2DBasics Device Output is to a Frame ... (Graphics g) {// Work

Object Hierarchy

java.lang.Object.Object

java.lang.awt.Component Abstract super-class – implementedby buttons, scrollbars, canvases etc

java.lang.awt.Container Holds Components

java.lang.awt.Window No borders, menubars.Also JComponent

java.lang.awt.Frame Title and borderjava.lang.awt.Frame.paint()

Invoked to redraw Component

Components/Containers receive events from window manager

Sub-class paint() methods invoked to redraw Component

Basics Java 2D 3/17

Page 19: Java2D - University of Exeterempslocal.ex.ac.uk/people/staff/pjk205/ECM2410/slides03.pdf · Basics Java 2D 2/17. Java2DBasics Device Output is to a Frame ... (Graphics g) {// Work

Object Hierarchy

java.lang.Object.Object

java.lang.awt.Component Abstract super-class – implementedby buttons, scrollbars, canvases etc

java.lang.awt.Container Holds Components

java.lang.awt.Window No borders, menubars.Also JComponent

java.lang.awt.Frame Title and borderjava.lang.awt.Frame.paint()

Invoked to redraw Component

Components/Containers receive events from window manager

Sub-class paint() methods invoked to redraw Component

Basics Java 2D 3/17

Page 20: Java2D - University of Exeterempslocal.ex.ac.uk/people/staff/pjk205/ECM2410/slides03.pdf · Basics Java 2D 2/17. Java2DBasics Device Output is to a Frame ... (Graphics g) {// Work

Object Hierarchy

java.lang.Object.Object

java.lang.awt.Component Abstract super-class – implementedby buttons, scrollbars, canvases etc

java.lang.awt.Container Holds Components

java.lang.awt.Window No borders, menubars.Also JComponent

java.lang.awt.Frame Title and borderjava.lang.awt.Frame.paint()

Invoked to redraw Component

Components/Containers receive events from window manager

Sub-class paint() methods invoked to redraw Component

Basics Java 2D 3/17

Page 21: Java2D - University of Exeterempslocal.ex.ac.uk/people/staff/pjk205/ECM2410/slides03.pdf · Basics Java 2D 2/17. Java2DBasics Device Output is to a Frame ... (Graphics g) {// Work

String Art Exeter.java

import java.awt.*;import java.awt.geom.*;

public class StringArtExeter extends ApplicationFrame {public StringArtExeter () {

super("StringArtExeter"); // Name in titlebarsetSize(600, 600); // Frame size, in pixelscenter(); // Centre of desktopsetVisible(true);

}

public void paint(Graphics g) {// Work done here

}

public static void main(String[] args) {new StringArtExeter();

}}

Basics Java 2D 4/17

Page 22: Java2D - University of Exeterempslocal.ex.ac.uk/people/staff/pjk205/ECM2410/slides03.pdf · Basics Java 2D 2/17. Java2DBasics Device Output is to a Frame ... (Graphics g) {// Work

String Art Exeter.java

import java.awt.*;import java.awt.geom.*;

public class StringArtExeter extends ApplicationFrame {public StringArtExeter () {

super("StringArtExeter"); // Name in titlebarsetSize(600, 600); // Frame size, in pixelscenter(); // Centre of desktopsetVisible(true);

}

public void paint(Graphics g) {// Work done here

}

public static void main(String[] args) {new StringArtExeter();

}}

Basics Java 2D 4/17

Page 23: Java2D - University of Exeterempslocal.ex.ac.uk/people/staff/pjk205/ECM2410/slides03.pdf · Basics Java 2D 2/17. Java2DBasics Device Output is to a Frame ... (Graphics g) {// Work

String Art Exeter.java

import java.awt.*;import java.awt.geom.*;

public class StringArtExeter extends ApplicationFrame {public StringArtExeter () {

super("StringArtExeter"); // Name in titlebarsetSize(600, 600); // Frame size, in pixelscenter(); // Centre of desktopsetVisible(true);

}

public void paint(Graphics g) {// Work done here

}

public static void main(String[] args) {new StringArtExeter();

}}

Basics Java 2D 4/17

Page 24: Java2D - University of Exeterempslocal.ex.ac.uk/people/staff/pjk205/ECM2410/slides03.pdf · Basics Java 2D 2/17. Java2DBasics Device Output is to a Frame ... (Graphics g) {// Work

String Art Exeter.java

import java.awt.*;import java.awt.geom.*;

public class StringArtExeter extends ApplicationFrame {public StringArtExeter () {

super("StringArtExeter"); // Name in titlebarsetSize(600, 600); // Frame size, in pixelscenter(); // Centre of desktopsetVisible(true);

}

public void paint(Graphics g) {// Work done here

}

public static void main(String[] args) {new StringArtExeter();

}}

Basics Java 2D 4/17

Page 25: Java2D - University of Exeterempslocal.ex.ac.uk/people/staff/pjk205/ECM2410/slides03.pdf · Basics Java 2D 2/17. Java2DBasics Device Output is to a Frame ... (Graphics g) {// Work

String Art Exeter.java

import java.awt.*;import java.awt.geom.*;

public class StringArtExeter extends ApplicationFrame {public StringArtExeter () {

super("StringArtExeter"); // Name in titlebarsetSize(600, 600); // Frame size, in pixelscenter(); // Centre of desktopsetVisible(true);

}

public void paint(Graphics g) {// Work done here

}

public static void main(String[] args) {new StringArtExeter();

}}

Basics Java 2D 4/17

Page 26: Java2D - University of Exeterempslocal.ex.ac.uk/people/staff/pjk205/ECM2410/slides03.pdf · Basics Java 2D 2/17. Java2DBasics Device Output is to a Frame ... (Graphics g) {// Work

String Art Exeter.java

import java.awt.*;import java.awt.geom.*;

public class StringArtExeter extends ApplicationFrame {public StringArtExeter () {

super("StringArtExeter"); // Name in titlebarsetSize(600, 600); // Frame size, in pixelscenter(); // Centre of desktopsetVisible(true);

}

public void paint(Graphics g) {// Work done here

}

public static void main(String[] args) {new StringArtExeter();

}}

Basics Java 2D 4/17

Page 27: Java2D - University of Exeterempslocal.ex.ac.uk/people/staff/pjk205/ECM2410/slides03.pdf · Basics Java 2D 2/17. Java2DBasics Device Output is to a Frame ... (Graphics g) {// Work

Application Frame.java

Extends FrameSets up an application with user interface

Methodspublic ApplicationFrame(String title)Constructor, putting “title” in frame title-bar

public void center()Centre frame on desktop

System.exit() when frame closed.

Code under “Example Files” on ELE pageApplicationFramePrint – with printing interface

Basics Java 2D 5/17

Page 28: Java2D - University of Exeterempslocal.ex.ac.uk/people/staff/pjk205/ECM2410/slides03.pdf · Basics Java 2D 2/17. Java2DBasics Device Output is to a Frame ... (Graphics g) {// Work

Application Frame.java

Extends FrameSets up an application with user interface

Methodspublic ApplicationFrame(String title)Constructor, putting “title” in frame title-bar

public void center()Centre frame on desktop

System.exit() when frame closed.

Code under “Example Files” on ELE pageApplicationFramePrint – with printing interface

Basics Java 2D 5/17

Page 29: Java2D - University of Exeterempslocal.ex.ac.uk/people/staff/pjk205/ECM2410/slides03.pdf · Basics Java 2D 2/17. Java2DBasics Device Output is to a Frame ... (Graphics g) {// Work

Application Frame.java

Extends FrameSets up an application with user interface

Methodspublic ApplicationFrame(String title)Constructor, putting “title” in frame title-bar

public void center()Centre frame on desktop

System.exit() when frame closed.

Code under “Example Files” on ELE pageApplicationFramePrint – with printing interface

Basics Java 2D 5/17

Page 30: Java2D - University of Exeterempslocal.ex.ac.uk/people/staff/pjk205/ECM2410/slides03.pdf · Basics Java 2D 2/17. Java2DBasics Device Output is to a Frame ... (Graphics g) {// Work

Application Frame.java

Extends FrameSets up an application with user interface

Methodspublic ApplicationFrame(String title)Constructor, putting “title” in frame title-bar

public void center()Centre frame on desktop

System.exit() when frame closed.

Code under “Example Files” on ELE pageApplicationFramePrint – with printing interface

Basics Java 2D 5/17

Page 31: Java2D - University of Exeterempslocal.ex.ac.uk/people/staff/pjk205/ECM2410/slides03.pdf · Basics Java 2D 2/17. Java2DBasics Device Output is to a Frame ... (Graphics g) {// Work

Application Frame.java

Extends FrameSets up an application with user interface

Methodspublic ApplicationFrame(String title)Constructor, putting “title” in frame title-bar

public void center()Centre frame on desktop

System.exit() when frame closed.

Code under “Example Files” on ELE pageApplicationFramePrint – with printing interface

Basics Java 2D 5/17

Page 32: Java2D - University of Exeterempslocal.ex.ac.uk/people/staff/pjk205/ECM2410/slides03.pdf · Basics Java 2D 2/17. Java2DBasics Device Output is to a Frame ... (Graphics g) {// Work

Application Frame.java

Extends FrameSets up an application with user interface

Methodspublic ApplicationFrame(String title)Constructor, putting “title” in frame title-bar

public void center()Centre frame on desktop

System.exit() when frame closed.

Code under “Example Files” on ELE pageApplicationFramePrint – with printing interface

Basics Java 2D 5/17

Page 33: Java2D - University of Exeterempslocal.ex.ac.uk/people/staff/pjk205/ECM2410/slides03.pdf · Basics Java 2D 2/17. Java2DBasics Device Output is to a Frame ... (Graphics g) {// Work

Application Frame.java

Extends FrameSets up an application with user interface

Methodspublic ApplicationFrame(String title)Constructor, putting “title” in frame title-bar

public void center()Centre frame on desktop

System.exit() when frame closed.

Code under “Example Files” on ELE pageApplicationFramePrint – with printing interface

Basics Java 2D 5/17

Page 34: Java2D - University of Exeterempslocal.ex.ac.uk/people/staff/pjk205/ECM2410/slides03.pdf · Basics Java 2D 2/17. Java2DBasics Device Output is to a Frame ... (Graphics g) {// Work

Application Frame.java

Extends FrameSets up an application with user interface

Methodspublic ApplicationFrame(String title)Constructor, putting “title” in frame title-bar

public void center()Centre frame on desktop

System.exit() when frame closed.

Code under “Example Files” on ELE pageApplicationFramePrint – with printing interface

Basics Java 2D 5/17

Page 35: Java2D - University of Exeterempslocal.ex.ac.uk/people/staff/pjk205/ECM2410/slides03.pdf · Basics Java 2D 2/17. Java2DBasics Device Output is to a Frame ... (Graphics g) {// Work

Application Frame.java

Extends FrameSets up an application with user interface

Methodspublic ApplicationFrame(String title)Constructor, putting “title” in frame title-bar

public void center()Centre frame on desktop

System.exit() when frame closed.

Code under “Example Files” on ELE pageApplicationFramePrint – with printing interface

Basics Java 2D 5/17

Page 36: Java2D - University of Exeterempslocal.ex.ac.uk/people/staff/pjk205/ECM2410/slides03.pdf · Basics Java 2D 2/17. Java2DBasics Device Output is to a Frame ... (Graphics g) {// Work

Application Frame.java

Extends FrameSets up an application with user interface

Methodspublic ApplicationFrame(String title)Constructor, putting “title” in frame title-bar

public void center()Centre frame on desktop

System.exit() when frame closed.

Code under “Example Files” on ELE pageApplicationFramePrint – with printing interface

Basics Java 2D 5/17

Page 37: Java2D - University of Exeterempslocal.ex.ac.uk/people/staff/pjk205/ECM2410/slides03.pdf · Basics Java 2D 2/17. Java2DBasics Device Output is to a Frame ... (Graphics g) {// Work

Application Frame.java

Extends FrameSets up an application with user interface

Methodspublic ApplicationFrame(String title)Constructor, putting “title” in frame title-bar

public void center()Centre frame on desktop

System.exit() when frame closed.

Code under “Example Files” on ELE pageApplicationFramePrint – with printing interface

Basics Java 2D 5/17

Page 38: Java2D - University of Exeterempslocal.ex.ac.uk/people/staff/pjk205/ECM2410/slides03.pdf · Basics Java 2D 2/17. Java2DBasics Device Output is to a Frame ... (Graphics g) {// Work

String Art Exeter.java

private int mNumberOfLines = 25;private Color[] mColors = { Color.red, Color.green, Color.blue };

public void paint(Graphics g) {Graphics2D g2 = (Graphics2D)g; // Promote to Graphics2D context

System.out.println("Paint");Dimension d = getSize(); // Defined by Frame

for (int i = 0; i < mNumberOfLines; i++) {double ratio = (double)i / (double)mNumberOfLines;Line2D line = new Line2D.Double(

0, ratio * d.height,ratio * d.width, d.height);

g2.setPaint(mColors[i % mColors.length]);g2.draw(line);

}}

Basics Java 2D 6/17

Page 39: Java2D - University of Exeterempslocal.ex.ac.uk/people/staff/pjk205/ECM2410/slides03.pdf · Basics Java 2D 2/17. Java2DBasics Device Output is to a Frame ... (Graphics g) {// Work

String Art Exeter.java

private int mNumberOfLines = 25;private Color[] mColors = { Color.red, Color.green, Color.blue };

public void paint(Graphics g) {Graphics2D g2 = (Graphics2D)g; // Promote to Graphics2D context

System.out.println("Paint");Dimension d = getSize(); // Defined by Frame

for (int i = 0; i < mNumberOfLines; i++) {double ratio = (double)i / (double)mNumberOfLines;Line2D line = new Line2D.Double(

0, ratio * d.height,ratio * d.width, d.height);

g2.setPaint(mColors[i % mColors.length]);g2.draw(line);

}}

Basics Java 2D 6/17

Page 40: Java2D - University of Exeterempslocal.ex.ac.uk/people/staff/pjk205/ECM2410/slides03.pdf · Basics Java 2D 2/17. Java2DBasics Device Output is to a Frame ... (Graphics g) {// Work

String Art Exeter.java

private int mNumberOfLines = 25;private Color[] mColors = { Color.red, Color.green, Color.blue };

public void paint(Graphics g) {Graphics2D g2 = (Graphics2D)g; // Promote to Graphics2D context

System.out.println("Paint");Dimension d = getSize(); // Defined by Frame

for (int i = 0; i < mNumberOfLines; i++) {double ratio = (double)i / (double)mNumberOfLines;Line2D line = new Line2D.Double(

0, ratio * d.height,ratio * d.width, d.height);

g2.setPaint(mColors[i % mColors.length]);g2.draw(line);

}}

Basics Java 2D 6/17

Page 41: Java2D - University of Exeterempslocal.ex.ac.uk/people/staff/pjk205/ECM2410/slides03.pdf · Basics Java 2D 2/17. Java2DBasics Device Output is to a Frame ... (Graphics g) {// Work

String Art Exeter.java

private int mNumberOfLines = 25;private Color[] mColors = { Color.red, Color.green, Color.blue };

public void paint(Graphics g) {Graphics2D g2 = (Graphics2D)g; // Promote to Graphics2D context

System.out.println("Paint");Dimension d = getSize(); // Defined by Frame

for (int i = 0; i < mNumberOfLines; i++) {double ratio = (double)i / (double)mNumberOfLines;Line2D line = new Line2D.Double(

0, ratio * d.height,ratio * d.width, d.height);

g2.setPaint(mColors[i % mColors.length]);g2.draw(line);

}}

Basics Java 2D 6/17

Page 42: Java2D - University of Exeterempslocal.ex.ac.uk/people/staff/pjk205/ECM2410/slides03.pdf · Basics Java 2D 2/17. Java2DBasics Device Output is to a Frame ... (Graphics g) {// Work

String Art Exeter.java

private int mNumberOfLines = 25;private Color[] mColors = { Color.red, Color.green, Color.blue };

public void paint(Graphics g) {Graphics2D g2 = (Graphics2D)g; // Promote to Graphics2D context

System.out.println("Paint");Dimension d = getSize(); // Defined by Frame

for (int i = 0; i < mNumberOfLines; i++) {double ratio = (double)i / (double)mNumberOfLines;Line2D line = new Line2D.Double(

0, ratio * d.height,ratio * d.width, d.height);

g2.setPaint(mColors[i % mColors.length]);g2.draw(line);

}}

Basics Java 2D 6/17

Page 43: Java2D - University of Exeterempslocal.ex.ac.uk/people/staff/pjk205/ECM2410/slides03.pdf · Basics Java 2D 2/17. Java2DBasics Device Output is to a Frame ... (Graphics g) {// Work

String Art Exeter.java

private int mNumberOfLines = 25;private Color[] mColors = { Color.red, Color.green, Color.blue };

public void paint(Graphics g) {Graphics2D g2 = (Graphics2D)g; // Promote to Graphics2D context

System.out.println("Paint");Dimension d = getSize(); // Defined by Frame

for (int i = 0; i < mNumberOfLines; i++) {double ratio = (double)i / (double)mNumberOfLines;Line2D line = new Line2D.Double(

0, ratio * d.height,ratio * d.width, d.height);

g2.setPaint(mColors[i % mColors.length]);g2.draw(line);

}}

Basics Java 2D 6/17

Page 44: Java2D - University of Exeterempslocal.ex.ac.uk/people/staff/pjk205/ECM2410/slides03.pdf · Basics Java 2D 2/17. Java2DBasics Device Output is to a Frame ... (Graphics g) {// Work

String Art Exeter.java

private int mNumberOfLines = 25;private Color[] mColors = { Color.red, Color.green, Color.blue };

public void paint(Graphics g) {Graphics2D g2 = (Graphics2D)g; // Promote to Graphics2D context

System.out.println("Paint");Dimension d = getSize(); // Defined by Frame

for (int i = 0; i < mNumberOfLines; i++) {double ratio = (double)i / (double)mNumberOfLines;Line2D line = new Line2D.Double(

0, ratio * d.height,ratio * d.width, d.height);

g2.setPaint(mColors[i % mColors.length]);g2.draw(line);

}}

Basics Java 2D 6/17

Page 45: Java2D - University of Exeterempslocal.ex.ac.uk/people/staff/pjk205/ECM2410/slides03.pdf · Basics Java 2D 2/17. Java2DBasics Device Output is to a Frame ... (Graphics g) {// Work

The paint() Method

paint() is invoked whenever the Frame needs redrawingResize, redraw, expose eventsOccasionally invoked unnecessarily.

paint(Graphics g)

g is old graphics context; cast toGraphics2D

Device coordinate origin is at thetop left hand corner.X-axis horizontally.Y-axis vertically downwards.Frame is also occupied bywindow manager borders etcDefault transformation fromworld to device coordinates isthe identity

Basics Java 2D 7/17

Page 46: Java2D - University of Exeterempslocal.ex.ac.uk/people/staff/pjk205/ECM2410/slides03.pdf · Basics Java 2D 2/17. Java2DBasics Device Output is to a Frame ... (Graphics g) {// Work

The paint() Method

paint() is invoked whenever the Frame needs redrawingResize, redraw, expose eventsOccasionally invoked unnecessarily.

paint(Graphics g)

g is old graphics context; cast toGraphics2D

Device coordinate origin is at thetop left hand corner.X-axis horizontally.Y-axis vertically downwards.Frame is also occupied bywindow manager borders etcDefault transformation fromworld to device coordinates isthe identity

Basics Java 2D 7/17

Page 47: Java2D - University of Exeterempslocal.ex.ac.uk/people/staff/pjk205/ECM2410/slides03.pdf · Basics Java 2D 2/17. Java2DBasics Device Output is to a Frame ... (Graphics g) {// Work

The paint() Method

paint() is invoked whenever the Frame needs redrawingResize, redraw, expose eventsOccasionally invoked unnecessarily.

paint(Graphics g)

g is old graphics context; cast toGraphics2D

Device coordinate origin is at thetop left hand corner.X-axis horizontally.Y-axis vertically downwards.Frame is also occupied bywindow manager borders etcDefault transformation fromworld to device coordinates isthe identity

Basics Java 2D 7/17

Page 48: Java2D - University of Exeterempslocal.ex.ac.uk/people/staff/pjk205/ECM2410/slides03.pdf · Basics Java 2D 2/17. Java2DBasics Device Output is to a Frame ... (Graphics g) {// Work

The paint() Method

paint() is invoked whenever the Frame needs redrawingResize, redraw, expose eventsOccasionally invoked unnecessarily.

paint(Graphics g)

g is old graphics context; cast toGraphics2D

Device coordinate origin is at thetop left hand corner.X-axis horizontally.Y-axis vertically downwards.Frame is also occupied bywindow manager borders etcDefault transformation fromworld to device coordinates isthe identity

Basics Java 2D 7/17

Page 49: Java2D - University of Exeterempslocal.ex.ac.uk/people/staff/pjk205/ECM2410/slides03.pdf · Basics Java 2D 2/17. Java2DBasics Device Output is to a Frame ... (Graphics g) {// Work

The paint() Method

paint() is invoked whenever the Frame needs redrawingResize, redraw, expose eventsOccasionally invoked unnecessarily.

paint(Graphics g)

g is old graphics context; cast toGraphics2D

Device coordinate origin is at thetop left hand corner.X-axis horizontally.Y-axis vertically downwards.Frame is also occupied bywindow manager borders etcDefault transformation fromworld to device coordinates isthe identity

Basics Java 2D 7/17

Page 50: Java2D - University of Exeterempslocal.ex.ac.uk/people/staff/pjk205/ECM2410/slides03.pdf · Basics Java 2D 2/17. Java2DBasics Device Output is to a Frame ... (Graphics g) {// Work

The paint() Method

paint() is invoked whenever the Frame needs redrawingResize, redraw, expose eventsOccasionally invoked unnecessarily.

paint(Graphics g)

g is old graphics context; cast toGraphics2D

Device coordinate origin is at thetop left hand corner.X-axis horizontally.Y-axis vertically downwards.Frame is also occupied bywindow manager borders etcDefault transformation fromworld to device coordinates isthe identity

Basics Java 2D 7/17

Page 51: Java2D - University of Exeterempslocal.ex.ac.uk/people/staff/pjk205/ECM2410/slides03.pdf · Basics Java 2D 2/17. Java2DBasics Device Output is to a Frame ... (Graphics g) {// Work

The paint() Method

paint() is invoked whenever the Frame needs redrawingResize, redraw, expose eventsOccasionally invoked unnecessarily.

paint(Graphics g)

g is old graphics context; cast toGraphics2D

Device coordinate origin is at thetop left hand corner.X-axis horizontally.Y-axis vertically downwards.Frame is also occupied bywindow manager borders etcDefault transformation fromworld to device coordinates isthe identity

Basics Java 2D 7/17

Page 52: Java2D - University of Exeterempslocal.ex.ac.uk/people/staff/pjk205/ECM2410/slides03.pdf · Basics Java 2D 2/17. Java2DBasics Device Output is to a Frame ... (Graphics g) {// Work

The paint() Method

paint() is invoked whenever the Frame needs redrawingResize, redraw, expose eventsOccasionally invoked unnecessarily.

paint(Graphics g)

g is old graphics context; cast toGraphics2D

Device coordinate origin is at thetop left hand corner.X-axis horizontally.Y-axis vertically downwards.Frame is also occupied bywindow manager borders etcDefault transformation fromworld to device coordinates isthe identity

Basics Java 2D 7/17

Page 53: Java2D - University of Exeterempslocal.ex.ac.uk/people/staff/pjk205/ECM2410/slides03.pdf · Basics Java 2D 2/17. Java2DBasics Device Output is to a Frame ... (Graphics g) {// Work

The paint() Method

paint() is invoked whenever the Frame needs redrawingResize, redraw, expose eventsOccasionally invoked unnecessarily.

paint(Graphics g)

g is old graphics context; cast toGraphics2D

Device coordinate origin is at thetop left hand corner.X-axis horizontally.Y-axis vertically downwards.Frame is also occupied bywindow manager borders etcDefault transformation fromworld to device coordinates isthe identity

Basics Java 2D 7/17

Page 54: Java2D - University of Exeterempslocal.ex.ac.uk/people/staff/pjk205/ECM2410/slides03.pdf · Basics Java 2D 2/17. Java2DBasics Device Output is to a Frame ... (Graphics g) {// Work

The paint() Method

paint() is invoked whenever the Frame needs redrawingResize, redraw, expose eventsOccasionally invoked unnecessarily.

paint(Graphics g)

g is old graphics context; cast toGraphics2D

Device coordinate origin is at thetop left hand corner.X-axis horizontally.Y-axis vertically downwards.Frame is also occupied bywindow manager borders etcDefault transformation fromworld to device coordinates isthe identity

Basics Java 2D 7/17

Page 55: Java2D - University of Exeterempslocal.ex.ac.uk/people/staff/pjk205/ECM2410/slides03.pdf · Basics Java 2D 2/17. Java2DBasics Device Output is to a Frame ... (Graphics g) {// Work

Coordinates

Local Coordinates

Specify locations of primitives in objectArbitrary units (chosen by the modeller).

World Coordinates or User Coordinates.Specify locations of objects in sceneSpecify location of clipping windowUnits dependent on graphics API.Java2D: pixels.

Device Coordinates or Screen CoordinatesMeasured in pixels.

Single viewportOccupies the entire device space.

Basics Java 2D 8/17

Page 56: Java2D - University of Exeterempslocal.ex.ac.uk/people/staff/pjk205/ECM2410/slides03.pdf · Basics Java 2D 2/17. Java2DBasics Device Output is to a Frame ... (Graphics g) {// Work

Coordinates

Local Coordinates

Specify locations of primitives in objectArbitrary units (chosen by the modeller).

World Coordinates or User Coordinates.Specify locations of objects in sceneSpecify location of clipping windowUnits dependent on graphics API.Java2D: pixels.

Device Coordinates or Screen CoordinatesMeasured in pixels.

Single viewportOccupies the entire device space.

Basics Java 2D 8/17

Page 57: Java2D - University of Exeterempslocal.ex.ac.uk/people/staff/pjk205/ECM2410/slides03.pdf · Basics Java 2D 2/17. Java2DBasics Device Output is to a Frame ... (Graphics g) {// Work

Coordinates

Local Coordinates

Specify locations of primitives in objectArbitrary units (chosen by the modeller).

World Coordinates or User Coordinates.Specify locations of objects in sceneSpecify location of clipping windowUnits dependent on graphics API.Java2D: pixels.

Device Coordinates or Screen CoordinatesMeasured in pixels.

Single viewportOccupies the entire device space.

Basics Java 2D 8/17

Page 58: Java2D - University of Exeterempslocal.ex.ac.uk/people/staff/pjk205/ECM2410/slides03.pdf · Basics Java 2D 2/17. Java2DBasics Device Output is to a Frame ... (Graphics g) {// Work

Coordinates

Local Coordinates

Specify locations of primitives in objectArbitrary units (chosen by the modeller).

World Coordinates or User Coordinates.Specify locations of objects in sceneSpecify location of clipping windowUnits dependent on graphics API.Java2D: pixels.

Device Coordinates or Screen CoordinatesMeasured in pixels.

Single viewportOccupies the entire device space.

Basics Java 2D 8/17

Page 59: Java2D - University of Exeterempslocal.ex.ac.uk/people/staff/pjk205/ECM2410/slides03.pdf · Basics Java 2D 2/17. Java2DBasics Device Output is to a Frame ... (Graphics g) {// Work

Coordinates

Local Coordinates

Specify locations of primitives in objectArbitrary units (chosen by the modeller).

World Coordinates or User Coordinates.Specify locations of objects in sceneSpecify location of clipping windowUnits dependent on graphics API.Java2D: pixels.

Device Coordinates or Screen CoordinatesMeasured in pixels.

Single viewportOccupies the entire device space.

Basics Java 2D 8/17

Page 60: Java2D - University of Exeterempslocal.ex.ac.uk/people/staff/pjk205/ECM2410/slides03.pdf · Basics Java 2D 2/17. Java2DBasics Device Output is to a Frame ... (Graphics g) {// Work

Coordinates

Local Coordinates

Specify locations of primitives in objectArbitrary units (chosen by the modeller).

World Coordinates or User Coordinates.Specify locations of objects in sceneSpecify location of clipping windowUnits dependent on graphics API.Java2D: pixels.

Device Coordinates or Screen CoordinatesMeasured in pixels.

Single viewportOccupies the entire device space.

Basics Java 2D 8/17

Page 61: Java2D - University of Exeterempslocal.ex.ac.uk/people/staff/pjk205/ECM2410/slides03.pdf · Basics Java 2D 2/17. Java2DBasics Device Output is to a Frame ... (Graphics g) {// Work

Coordinates

Local Coordinates

Specify locations of primitives in objectArbitrary units (chosen by the modeller).

World Coordinates or User Coordinates.Specify locations of objects in sceneSpecify location of clipping windowUnits dependent on graphics API.Java2D: pixels.

Device Coordinates or Screen CoordinatesMeasured in pixels.

Single viewportOccupies the entire device space.

Basics Java 2D 8/17

Page 62: Java2D - University of Exeterempslocal.ex.ac.uk/people/staff/pjk205/ECM2410/slides03.pdf · Basics Java 2D 2/17. Java2DBasics Device Output is to a Frame ... (Graphics g) {// Work

Coordinates

Local Coordinates

Specify locations of primitives in objectArbitrary units (chosen by the modeller).

World Coordinates or User Coordinates.Specify locations of objects in sceneSpecify location of clipping windowUnits dependent on graphics API.Java2D: pixels.

Device Coordinates or Screen CoordinatesMeasured in pixels.

Single viewportOccupies the entire device space.

Basics Java 2D 8/17

Page 63: Java2D - University of Exeterempslocal.ex.ac.uk/people/staff/pjk205/ECM2410/slides03.pdf · Basics Java 2D 2/17. Java2DBasics Device Output is to a Frame ... (Graphics g) {// Work

Coordinates

Local Coordinates

Specify locations of primitives in objectArbitrary units (chosen by the modeller).

World Coordinates or User Coordinates.Specify locations of objects in sceneSpecify location of clipping windowUnits dependent on graphics API.Java2D: pixels.

Device Coordinates or Screen CoordinatesMeasured in pixels.

Single viewportOccupies the entire device space.

Basics Java 2D 8/17

Page 64: Java2D - University of Exeterempslocal.ex.ac.uk/people/staff/pjk205/ECM2410/slides03.pdf · Basics Java 2D 2/17. Java2DBasics Device Output is to a Frame ... (Graphics g) {// Work

Coordinates

Local Coordinates

Specify locations of primitives in objectArbitrary units (chosen by the modeller).

World Coordinates or User Coordinates.Specify locations of objects in sceneSpecify location of clipping windowUnits dependent on graphics API.Java2D: pixels.

Device Coordinates or Screen CoordinatesMeasured in pixels.

Single viewportOccupies the entire device space.

Basics Java 2D 8/17

Page 65: Java2D - University of Exeterempslocal.ex.ac.uk/people/staff/pjk205/ECM2410/slides03.pdf · Basics Java 2D 2/17. Java2DBasics Device Output is to a Frame ... (Graphics g) {// Work

Coordinates

Local Coordinates

Specify locations of primitives in objectArbitrary units (chosen by the modeller).

World Coordinates or User Coordinates.Specify locations of objects in sceneSpecify location of clipping windowUnits dependent on graphics API.Java2D: pixels.

Device Coordinates or Screen CoordinatesMeasured in pixels.

Single viewportOccupies the entire device space.

Basics Java 2D 8/17

Page 66: Java2D - University of Exeterempslocal.ex.ac.uk/people/staff/pjk205/ECM2410/slides03.pdf · Basics Java 2D 2/17. Java2DBasics Device Output is to a Frame ... (Graphics g) {// Work

Coordinates

Local Coordinates

Specify locations of primitives in objectArbitrary units (chosen by the modeller).

World Coordinates or User Coordinates.Specify locations of objects in sceneSpecify location of clipping windowUnits dependent on graphics API.Java2D: pixels.

Device Coordinates or Screen CoordinatesMeasured in pixels.

Single viewportOccupies the entire device space.

Basics Java 2D 8/17

Page 67: Java2D - University of Exeterempslocal.ex.ac.uk/people/staff/pjk205/ECM2410/slides03.pdf · Basics Java 2D 2/17. Java2DBasics Device Output is to a Frame ... (Graphics g) {// Work

Coordinates

Local Coordinates

Specify locations of primitives in objectArbitrary units (chosen by the modeller).

World Coordinates or User Coordinates.Specify locations of objects in sceneSpecify location of clipping windowUnits dependent on graphics API.Java2D: pixels.

Device Coordinates or Screen CoordinatesMeasured in pixels.

Single viewportOccupies the entire device space.

Basics Java 2D 8/17

Page 68: Java2D - University of Exeterempslocal.ex.ac.uk/people/staff/pjk205/ECM2410/slides03.pdf · Basics Java 2D 2/17. Java2DBasics Device Output is to a Frame ... (Graphics g) {// Work

String Art Exeter Add.java

import java.awt.*;import java.awt.geom.*;import javax.swing.*;

public class StringArtExeterAdd extends JComponent {public void paint(Graphics g) { . . . }

public static void main(String[] args) {ApplicationFrame f =

new ApplicationFrame("StringArtExeterAdd");

f.add(new StringArtExeterAdd()); // Add to the JComponentf.setSize(600, 600);f.center();f.setVisible(true);

}}

Basics Java 2D 9/17

Page 69: Java2D - University of Exeterempslocal.ex.ac.uk/people/staff/pjk205/ECM2410/slides03.pdf · Basics Java 2D 2/17. Java2DBasics Device Output is to a Frame ... (Graphics g) {// Work

String Art Exeter Add.java

import java.awt.*;import java.awt.geom.*;import javax.swing.*;

public class StringArtExeterAdd extends JComponent {public void paint(Graphics g) { . . . }

public static void main(String[] args) {ApplicationFrame f =

new ApplicationFrame("StringArtExeterAdd");

f.add(new StringArtExeterAdd()); // Add to the JComponentf.setSize(600, 600);f.center();f.setVisible(true);

}}

Basics Java 2D 9/17

Page 70: Java2D - University of Exeterempslocal.ex.ac.uk/people/staff/pjk205/ECM2410/slides03.pdf · Basics Java 2D 2/17. Java2DBasics Device Output is to a Frame ... (Graphics g) {// Work

String Art Exeter Add.java

import java.awt.*;import java.awt.geom.*;import javax.swing.*;

public class StringArtExeterAdd extends JComponent {public void paint(Graphics g) { . . . }

public static void main(String[] args) {ApplicationFrame f =

new ApplicationFrame("StringArtExeterAdd");

f.add(new StringArtExeterAdd()); // Add to the JComponentf.setSize(600, 600);f.center();f.setVisible(true);

}}

Basics Java 2D 9/17

Page 71: Java2D - University of Exeterempslocal.ex.ac.uk/people/staff/pjk205/ECM2410/slides03.pdf · Basics Java 2D 2/17. Java2DBasics Device Output is to a Frame ... (Graphics g) {// Work

String Art Exeter Add.java

import java.awt.*;import java.awt.geom.*;import javax.swing.*;

public class StringArtExeterAdd extends JComponent {public void paint(Graphics g) { . . . }

public static void main(String[] args) {ApplicationFrame f =

new ApplicationFrame("StringArtExeterAdd");

f.add(new StringArtExeterAdd()); // Add to the JComponentf.setSize(600, 600);f.center();f.setVisible(true);

}}

Basics Java 2D 9/17

Page 72: Java2D - University of Exeterempslocal.ex.ac.uk/people/staff/pjk205/ECM2410/slides03.pdf · Basics Java 2D 2/17. Java2DBasics Device Output is to a Frame ... (Graphics g) {// Work

String Art Exeter Add.java

import java.awt.*;import java.awt.geom.*;import javax.swing.*;

public class StringArtExeterAdd extends JComponent {public void paint(Graphics g) { . . . }

public static void main(String[] args) {ApplicationFrame f =

new ApplicationFrame("StringArtExeterAdd");

f.add(new StringArtExeterAdd()); // Add to the JComponentf.setSize(600, 600);f.center();f.setVisible(true);

}}

Basics Java 2D 9/17

Page 73: Java2D - University of Exeterempslocal.ex.ac.uk/people/staff/pjk205/ECM2410/slides03.pdf · Basics Java 2D 2/17. Java2DBasics Device Output is to a Frame ... (Graphics g) {// Work

String Art Exeter Add.java

import java.awt.*;import java.awt.geom.*;import javax.swing.*;

public class StringArtExeterAdd extends JComponent {public void paint(Graphics g) { . . . }

public static void main(String[] args) {ApplicationFrame f =

new ApplicationFrame("StringArtExeterAdd");

f.add(new StringArtExeterAdd()); // Add to the JComponentf.setSize(600, 600);f.center();f.setVisible(true);

}}

Basics Java 2D 9/17

Page 74: Java2D - University of Exeterempslocal.ex.ac.uk/people/staff/pjk205/ECM2410/slides03.pdf · Basics Java 2D 2/17. Java2DBasics Device Output is to a Frame ... (Graphics g) {// Work

Modelling and Transformations

Modelling

Build objects in their own, natural coordinates.Standard size and orientation.Make objects as flexible as possible.

Transformations

Place objects in scene with transformations.Set the size, orientation with transformations.

Java

One graphics object per class.Constructor Instantiate shapes from primitives.paint() Draw the instantiated objects.

Modelling and transformation Java 2D 10/17

Page 75: Java2D - University of Exeterempslocal.ex.ac.uk/people/staff/pjk205/ECM2410/slides03.pdf · Basics Java 2D 2/17. Java2DBasics Device Output is to a Frame ... (Graphics g) {// Work

Modelling and Transformations

Modelling

Build objects in their own, natural coordinates.Standard size and orientation.Make objects as flexible as possible.

Transformations

Place objects in scene with transformations.Set the size, orientation with transformations.

Java

One graphics object per class.Constructor Instantiate shapes from primitives.paint() Draw the instantiated objects.

Modelling and transformation Java 2D 10/17

Page 76: Java2D - University of Exeterempslocal.ex.ac.uk/people/staff/pjk205/ECM2410/slides03.pdf · Basics Java 2D 2/17. Java2DBasics Device Output is to a Frame ... (Graphics g) {// Work

Modelling and Transformations

Modelling

Build objects in their own, natural coordinates.Standard size and orientation.Make objects as flexible as possible.

Transformations

Place objects in scene with transformations.Set the size, orientation with transformations.

Java

One graphics object per class.Constructor Instantiate shapes from primitives.paint() Draw the instantiated objects.

Modelling and transformation Java 2D 10/17

Page 77: Java2D - University of Exeterempslocal.ex.ac.uk/people/staff/pjk205/ECM2410/slides03.pdf · Basics Java 2D 2/17. Java2DBasics Device Output is to a Frame ... (Graphics g) {// Work

Modelling and Transformations

Modelling

Build objects in their own, natural coordinates.Standard size and orientation.Make objects as flexible as possible.

Transformations

Place objects in scene with transformations.Set the size, orientation with transformations.

Java

One graphics object per class.Constructor Instantiate shapes from primitives.paint() Draw the instantiated objects.

Modelling and transformation Java 2D 10/17

Page 78: Java2D - University of Exeterempslocal.ex.ac.uk/people/staff/pjk205/ECM2410/slides03.pdf · Basics Java 2D 2/17. Java2DBasics Device Output is to a Frame ... (Graphics g) {// Work

Modelling and Transformations

Modelling

Build objects in their own, natural coordinates.Standard size and orientation.Make objects as flexible as possible.

Transformations

Place objects in scene with transformations.Set the size, orientation with transformations.

Java

One graphics object per class.Constructor Instantiate shapes from primitives.paint() Draw the instantiated objects.

Modelling and transformation Java 2D 10/17

Page 79: Java2D - University of Exeterempslocal.ex.ac.uk/people/staff/pjk205/ECM2410/slides03.pdf · Basics Java 2D 2/17. Java2DBasics Device Output is to a Frame ... (Graphics g) {// Work

Modelling and Transformations

Modelling

Build objects in their own, natural coordinates.Standard size and orientation.Make objects as flexible as possible.

Transformations

Place objects in scene with transformations.Set the size, orientation with transformations.

Java

One graphics object per class.Constructor Instantiate shapes from primitives.paint() Draw the instantiated objects.

Modelling and transformation Java 2D 10/17

Page 80: Java2D - University of Exeterempslocal.ex.ac.uk/people/staff/pjk205/ECM2410/slides03.pdf · Basics Java 2D 2/17. Java2DBasics Device Output is to a Frame ... (Graphics g) {// Work

Modelling and Transformations

Modelling

Build objects in their own, natural coordinates.Standard size and orientation.Make objects as flexible as possible.

Transformations

Place objects in scene with transformations.Set the size, orientation with transformations.

Java

One graphics object per class.Constructor Instantiate shapes from primitives.paint() Draw the instantiated objects.

Modelling and transformation Java 2D 10/17

Page 81: Java2D - University of Exeterempslocal.ex.ac.uk/people/staff/pjk205/ECM2410/slides03.pdf · Basics Java 2D 2/17. Java2DBasics Device Output is to a Frame ... (Graphics g) {// Work

Modelling and Transformations

Modelling

Build objects in their own, natural coordinates.Standard size and orientation.Make objects as flexible as possible.

Transformations

Place objects in scene with transformations.Set the size, orientation with transformations.

Java

One graphics object per class.Constructor Instantiate shapes from primitives.paint() Draw the instantiated objects.

Modelling and transformation Java 2D 10/17

Page 82: Java2D - University of Exeterempslocal.ex.ac.uk/people/staff/pjk205/ECM2410/slides03.pdf · Basics Java 2D 2/17. Java2DBasics Device Output is to a Frame ... (Graphics g) {// Work

Modelling and Transformations

Modelling

Build objects in their own, natural coordinates.Standard size and orientation.Make objects as flexible as possible.

Transformations

Place objects in scene with transformations.Set the size, orientation with transformations.

Java

One graphics object per class.Constructor Instantiate shapes from primitives.paint() Draw the instantiated objects.

Modelling and transformation Java 2D 10/17

Page 83: Java2D - University of Exeterempslocal.ex.ac.uk/people/staff/pjk205/ECM2410/slides03.pdf · Basics Java 2D 2/17. Java2DBasics Device Output is to a Frame ... (Graphics g) {// Work

Modelling and Transformations

Modelling

Build objects in their own, natural coordinates.Standard size and orientation.Make objects as flexible as possible.

Transformations

Place objects in scene with transformations.Set the size, orientation with transformations.

Java

One graphics object per class.Constructor Instantiate shapes from primitives.paint() Draw the instantiated objects.

Modelling and transformation Java 2D 10/17

Page 84: Java2D - University of Exeterempslocal.ex.ac.uk/people/staff/pjk205/ECM2410/slides03.pdf · Basics Java 2D 2/17. Java2DBasics Device Output is to a Frame ... (Graphics g) {// Work

Modelling and Transformations

Modelling

Build objects in their own, natural coordinates.Standard size and orientation.Make objects as flexible as possible.

Transformations

Place objects in scene with transformations.Set the size, orientation with transformations.

Java

One graphics object per class.Constructor Instantiate shapes from primitives.paint() Draw the instantiated objects.

Modelling and transformation Java 2D 10/17

Page 85: Java2D - University of Exeterempslocal.ex.ac.uk/people/staff/pjk205/ECM2410/slides03.pdf · Basics Java 2D 2/17. Java2DBasics Device Output is to a Frame ... (Graphics g) {// Work

Modelling and Transformations

Modelling

Build objects in their own, natural coordinates.Standard size and orientation.Make objects as flexible as possible.

Transformations

Place objects in scene with transformations.Set the size, orientation with transformations.

Java

One graphics object per class.Constructor Instantiate shapes from primitives.paint() Draw the instantiated objects.

Modelling and transformation Java 2D 10/17

Page 86: Java2D - University of Exeterempslocal.ex.ac.uk/people/staff/pjk205/ECM2410/slides03.pdf · Basics Java 2D 2/17. Java2DBasics Device Output is to a Frame ... (Graphics g) {// Work

House.java – Primitives

body RectangleBottom left corner at (0,0)Width 150, Height 150

door RectangleBottom left corner at (50, 0)Width 50, Height 75.

roof Two lines( 0, 150) → (75, 250)(150, 150) → (75, 250)

(0,150)

(150,150)

(50,75) (100, 75)

(75,250)

(0,0)

(0,150)

Modelling and transformation Java 2D 11/17

Page 87: Java2D - University of Exeterempslocal.ex.ac.uk/people/staff/pjk205/ECM2410/slides03.pdf · Basics Java 2D 2/17. Java2DBasics Device Output is to a Frame ... (Graphics g) {// Work

House.java – Primitives

body RectangleBottom left corner at (0,0)Width 150, Height 150

door RectangleBottom left corner at (50, 0)Width 50, Height 75.

roof Two lines( 0, 150) → (75, 250)(150, 150) → (75, 250)

(0,150)

(150,150)

(50,75) (100, 75)

(75,250)

(0,0)

(0,150)

Modelling and transformation Java 2D 11/17

Page 88: Java2D - University of Exeterempslocal.ex.ac.uk/people/staff/pjk205/ECM2410/slides03.pdf · Basics Java 2D 2/17. Java2DBasics Device Output is to a Frame ... (Graphics g) {// Work

House.java – Primitives

body RectangleBottom left corner at (0,0)Width 150, Height 150

door RectangleBottom left corner at (50, 0)Width 50, Height 75.

roof Two lines( 0, 150) → (75, 250)(150, 150) → (75, 250)

(0,150)

(150,150)

(50,75) (100, 75)

(75,250)

(0,0)

(0,150)

Modelling and transformation Java 2D 11/17

Page 89: Java2D - University of Exeterempslocal.ex.ac.uk/people/staff/pjk205/ECM2410/slides03.pdf · Basics Java 2D 2/17. Java2DBasics Device Output is to a Frame ... (Graphics g) {// Work

House.java – Primitives

body RectangleBottom left corner at (0,0)Width 150, Height 150

door RectangleBottom left corner at (50, 0)Width 50, Height 75.

roof Two lines( 0, 150) → (75, 250)(150, 150) → (75, 250)

(0,150)

(150,150)

(50,75) (100, 75)

(75,250)

(0,0)

(0,150)

Modelling and transformation Java 2D 11/17

Page 90: Java2D - University of Exeterempslocal.ex.ac.uk/people/staff/pjk205/ECM2410/slides03.pdf · Basics Java 2D 2/17. Java2DBasics Device Output is to a Frame ... (Graphics g) {// Work

House.java – Primitives

body RectangleBottom left corner at (0,0)Width 150, Height 150

door RectangleBottom left corner at (50, 0)Width 50, Height 75.

roof Two lines( 0, 150) → (75, 250)(150, 150) → (75, 250)

(0,150)

(150,150)

(50,75) (100, 75)

(75,250)

(0,0)

(0,150)

Modelling and transformation Java 2D 11/17

Page 91: Java2D - University of Exeterempslocal.ex.ac.uk/people/staff/pjk205/ECM2410/slides03.pdf · Basics Java 2D 2/17. Java2DBasics Device Output is to a Frame ... (Graphics g) {// Work

House.java – Primitives

body RectangleBottom left corner at (0,0)Width 150, Height 150

door RectangleBottom left corner at (50, 0)Width 50, Height 75.

roof Two lines( 0, 150) → (75, 250)(150, 150) → (75, 250)

(0,150)

(150,150)

(50,75) (100, 75)

(75,250)

(0,0)

(0,150)

Modelling and transformation Java 2D 11/17

Page 92: Java2D - University of Exeterempslocal.ex.ac.uk/people/staff/pjk205/ECM2410/slides03.pdf · Basics Java 2D 2/17. Java2DBasics Device Output is to a Frame ... (Graphics g) {// Work

House.java – Primitives

body RectangleBottom left corner at (0,0)Width 150, Height 150

door RectangleBottom left corner at (50, 0)Width 50, Height 75.

roof Two lines( 0, 150) → (75, 250)(150, 150) → (75, 250)

(0,150)

(150,150)

(50,75) (100, 75)

(75,250)

(0,0)

(0,150)

Modelling and transformation Java 2D 11/17

Page 93: Java2D - University of Exeterempslocal.ex.ac.uk/people/staff/pjk205/ECM2410/slides03.pdf · Basics Java 2D 2/17. Java2DBasics Device Output is to a Frame ... (Graphics g) {// Work

House.java – Primitives

body RectangleBottom left corner at (0,0)Width 150, Height 150

door RectangleBottom left corner at (50, 0)Width 50, Height 75.

roof Two lines( 0, 150) → (75, 250)(150, 150) → (75, 250)

(0,150)

(150,150)

(50,75) (100, 75)

(75,250)

(0,0)

(0,150)

Modelling and transformation Java 2D 11/17

Page 94: Java2D - University of Exeterempslocal.ex.ac.uk/people/staff/pjk205/ECM2410/slides03.pdf · Basics Java 2D 2/17. Java2DBasics Device Output is to a Frame ... (Graphics g) {// Work

House.java – Primitives

body RectangleBottom left corner at (0,0)Width 150, Height 150

door RectangleBottom left corner at (50, 0)Width 50, Height 75.

roof Two lines( 0, 150) → (75, 250)(150, 150) → (75, 250)

(0,150)

(150,150)

(50,75) (100, 75)

(75,250)

(0,0)

(0,150)

Modelling and transformation Java 2D 11/17

Page 95: Java2D - University of Exeterempslocal.ex.ac.uk/people/staff/pjk205/ECM2410/slides03.pdf · Basics Java 2D 2/17. Java2DBasics Device Output is to a Frame ... (Graphics g) {// Work

House.java – Primitives

body RectangleBottom left corner at (0,0)Width 150, Height 150

door RectangleBottom left corner at (50, 0)Width 50, Height 75.

roof Two lines( 0, 150) → (75, 250)(150, 150) → (75, 250)

(0,150)

(150,150)

(50,75) (100, 75)

(75,250)

(0,0)

(0,150)

Modelling and transformation Java 2D 11/17

Page 96: Java2D - University of Exeterempslocal.ex.ac.uk/people/staff/pjk205/ECM2410/slides03.pdf · Basics Java 2D 2/17. Java2DBasics Device Output is to a Frame ... (Graphics g) {// Work

House.java – Primitives

body RectangleBottom left corner at (0,0)Width 150, Height 150

door RectangleBottom left corner at (50, 0)Width 50, Height 75.

roof Two lines( 0, 150) → (75, 250)(150, 150) → (75, 250)

(0,150)

(150,150)

(50,75) (100, 75)

(75,250)

(0,0)

(0,150)

Modelling and transformation Java 2D 11/17

Page 97: Java2D - University of Exeterempslocal.ex.ac.uk/people/staff/pjk205/ECM2410/slides03.pdf · Basics Java 2D 2/17. Java2DBasics Device Output is to a Frame ... (Graphics g) {// Work

House.java – Constructor

import java.awt.*;import java.awt.geom.*;

public class House {private Rectangle2D body;private Rectangle2D door;private GeneralPath roof = new GeneralPath();

public House() {// Setup the shapesbody = new Rectangle2D.Double(0.0, 0.0, 150.0, 150.0);door = new Rectangle2D.Double(50.0, 0.0, 50.0, 75.0);roof.append(new Line2D.Double(0.0, 150., 75., 250.), false);roof.append(new Line2D.Double(150., 150., 75., 250.), false);

}

public paint(Graphics g) {. . .

}}

Modelling and transformation Java 2D 12/17

Page 98: Java2D - University of Exeterempslocal.ex.ac.uk/people/staff/pjk205/ECM2410/slides03.pdf · Basics Java 2D 2/17. Java2DBasics Device Output is to a Frame ... (Graphics g) {// Work

House.java – Constructor

import java.awt.*;import java.awt.geom.*;

public class House {private Rectangle2D body;private Rectangle2D door;private GeneralPath roof = new GeneralPath();

public House() {// Setup the shapesbody = new Rectangle2D.Double(0.0, 0.0, 150.0, 150.0);door = new Rectangle2D.Double(50.0, 0.0, 50.0, 75.0);roof.append(new Line2D.Double(0.0, 150., 75., 250.), false);roof.append(new Line2D.Double(150., 150., 75., 250.), false);

}

public paint(Graphics g) {. . .

}}

Modelling and transformation Java 2D 12/17

Page 99: Java2D - University of Exeterempslocal.ex.ac.uk/people/staff/pjk205/ECM2410/slides03.pdf · Basics Java 2D 2/17. Java2DBasics Device Output is to a Frame ... (Graphics g) {// Work

House.java – Constructor

import java.awt.*;import java.awt.geom.*;

public class House {private Rectangle2D body;private Rectangle2D door;private GeneralPath roof = new GeneralPath();

public House() {// Setup the shapesbody = new Rectangle2D.Double(0.0, 0.0, 150.0, 150.0);door = new Rectangle2D.Double(50.0, 0.0, 50.0, 75.0);roof.append(new Line2D.Double(0.0, 150., 75., 250.), false);roof.append(new Line2D.Double(150., 150., 75., 250.), false);

}

public paint(Graphics g) {. . .

}}

Modelling and transformation Java 2D 12/17

Page 100: Java2D - University of Exeterempslocal.ex.ac.uk/people/staff/pjk205/ECM2410/slides03.pdf · Basics Java 2D 2/17. Java2DBasics Device Output is to a Frame ... (Graphics g) {// Work

House.java – Constructor

import java.awt.*;import java.awt.geom.*;

public class House {private Rectangle2D body;private Rectangle2D door;private GeneralPath roof = new GeneralPath();

public House() {// Setup the shapesbody = new Rectangle2D.Double(0.0, 0.0, 150.0, 150.0);door = new Rectangle2D.Double(50.0, 0.0, 50.0, 75.0);roof.append(new Line2D.Double(0.0, 150., 75., 250.), false);roof.append(new Line2D.Double(150., 150., 75., 250.), false);

}

public paint(Graphics g) {. . .

}}

Modelling and transformation Java 2D 12/17

Page 101: Java2D - University of Exeterempslocal.ex.ac.uk/people/staff/pjk205/ECM2410/slides03.pdf · Basics Java 2D 2/17. Java2DBasics Device Output is to a Frame ... (Graphics g) {// Work

House.java – Constructor

import java.awt.*;import java.awt.geom.*;

public class House {private Rectangle2D body;private Rectangle2D door;private GeneralPath roof = new GeneralPath();

public House() {// Setup the shapesbody = new Rectangle2D.Double(0.0, 0.0, 150.0, 150.0);door = new Rectangle2D.Double(50.0, 0.0, 50.0, 75.0);roof.append(new Line2D.Double(0.0, 150., 75., 250.), false);roof.append(new Line2D.Double(150., 150., 75., 250.), false);

}

public paint(Graphics g) {. . .

}}

Modelling and transformation Java 2D 12/17

Page 102: Java2D - University of Exeterempslocal.ex.ac.uk/people/staff/pjk205/ECM2410/slides03.pdf · Basics Java 2D 2/17. Java2DBasics Device Output is to a Frame ... (Graphics g) {// Work

House.java – Constructor

import java.awt.*;import java.awt.geom.*;

public class House {private Rectangle2D body;private Rectangle2D door;private GeneralPath roof = new GeneralPath();

public House() {// Setup the shapesbody = new Rectangle2D.Double(0.0, 0.0, 150.0, 150.0);door = new Rectangle2D.Double(50.0, 0.0, 50.0, 75.0);roof.append(new Line2D.Double(0.0, 150., 75., 250.), false);roof.append(new Line2D.Double(150., 150., 75., 250.), false);

}

public paint(Graphics g) {. . .

}}

Modelling and transformation Java 2D 12/17

Page 103: Java2D - University of Exeterempslocal.ex.ac.uk/people/staff/pjk205/ECM2410/slides03.pdf · Basics Java 2D 2/17. Java2DBasics Device Output is to a Frame ... (Graphics g) {// Work

House.java – Constructor

import java.awt.*;import java.awt.geom.*;

public class House {private Rectangle2D body;private Rectangle2D door;private GeneralPath roof = new GeneralPath();

public House() {// Setup the shapesbody = new Rectangle2D.Double(0.0, 0.0, 150.0, 150.0);door = new Rectangle2D.Double(50.0, 0.0, 50.0, 75.0);roof.append(new Line2D.Double(0.0, 150., 75., 250.), false);roof.append(new Line2D.Double(150., 150., 75., 250.), false);

}

public paint(Graphics g) {. . .

}}

Modelling and transformation Java 2D 12/17

Page 104: Java2D - University of Exeterempslocal.ex.ac.uk/people/staff/pjk205/ECM2410/slides03.pdf · Basics Java 2D 2/17. Java2DBasics Device Output is to a Frame ... (Graphics g) {// Work

House.java – Constructor

import java.awt.*;import java.awt.geom.*;

public class House {private Rectangle2D body;private Rectangle2D door;private GeneralPath roof = new GeneralPath();

public House() {// Setup the shapesbody = new Rectangle2D.Double(0.0, 0.0, 150.0, 150.0);door = new Rectangle2D.Double(50.0, 0.0, 50.0, 75.0);roof.append(new Line2D.Double(0.0, 150., 75., 250.), false);roof.append(new Line2D.Double(150., 150., 75., 250.), false);

}

public paint(Graphics g) {. . .

}}

Modelling and transformation Java 2D 12/17

Page 105: Java2D - University of Exeterempslocal.ex.ac.uk/people/staff/pjk205/ECM2410/slides03.pdf · Basics Java 2D 2/17. Java2DBasics Device Output is to a Frame ... (Graphics g) {// Work

House.java – Constructor

import java.awt.*;import java.awt.geom.*;

public class House {private Rectangle2D body;private Rectangle2D door;private GeneralPath roof = new GeneralPath();

public House() {// Setup the shapesbody = new Rectangle2D.Double(0.0, 0.0, 150.0, 150.0);door = new Rectangle2D.Double(50.0, 0.0, 50.0, 75.0);roof.append(new Line2D.Double(0.0, 150., 75., 250.), false);roof.append(new Line2D.Double(150., 150., 75., 250.), false);

}

public paint(Graphics g) {. . .

}}

Modelling and transformation Java 2D 12/17

Page 106: Java2D - University of Exeterempslocal.ex.ac.uk/people/staff/pjk205/ECM2410/slides03.pdf · Basics Java 2D 2/17. Java2DBasics Device Output is to a Frame ... (Graphics g) {// Work

House.java – Constructor

import java.awt.*;import java.awt.geom.*;

public class House {private Rectangle2D body;private Rectangle2D door;private GeneralPath roof = new GeneralPath();

public House() {// Setup the shapesbody = new Rectangle2D.Double(0.0, 0.0, 150.0, 150.0);door = new Rectangle2D.Double(50.0, 0.0, 50.0, 75.0);roof.append(new Line2D.Double(0.0, 150., 75., 250.), false);roof.append(new Line2D.Double(150., 150., 75., 250.), false);

}

public paint(Graphics g) {. . .

}}

Modelling and transformation Java 2D 12/17

Page 107: Java2D - University of Exeterempslocal.ex.ac.uk/people/staff/pjk205/ECM2410/slides03.pdf · Basics Java 2D 2/17. Java2DBasics Device Output is to a Frame ... (Graphics g) {// Work

House.java – paint()

public void paint(Graphics g) {Graphics2D g2 = (Graphics2D)g; // Promote to 2D context

g2.setStroke(new BasicStroke(5));g2.setPaint(Color.red); // Interiorg2.fill(body);g2.setPaint(Color.black); // Borderg2.draw(body);

g2.setPaint(Color.cyan);g2.draw(roof);

g2.setPaint(Color.green);g2.fill(door);

}

Modelling and transformation Java 2D 13/17

Page 108: Java2D - University of Exeterempslocal.ex.ac.uk/people/staff/pjk205/ECM2410/slides03.pdf · Basics Java 2D 2/17. Java2DBasics Device Output is to a Frame ... (Graphics g) {// Work

House.java – paint()

public void paint(Graphics g) {Graphics2D g2 = (Graphics2D)g; // Promote to 2D context

g2.setStroke(new BasicStroke(5));g2.setPaint(Color.red); // Interiorg2.fill(body);g2.setPaint(Color.black); // Borderg2.draw(body);

g2.setPaint(Color.cyan);g2.draw(roof);

g2.setPaint(Color.green);g2.fill(door);

}

Modelling and transformation Java 2D 13/17

Page 109: Java2D - University of Exeterempslocal.ex.ac.uk/people/staff/pjk205/ECM2410/slides03.pdf · Basics Java 2D 2/17. Java2DBasics Device Output is to a Frame ... (Graphics g) {// Work

House.java – paint()

public void paint(Graphics g) {Graphics2D g2 = (Graphics2D)g; // Promote to 2D context

g2.setStroke(new BasicStroke(5));g2.setPaint(Color.red); // Interiorg2.fill(body);g2.setPaint(Color.black); // Borderg2.draw(body);

g2.setPaint(Color.cyan);g2.draw(roof);

g2.setPaint(Color.green);g2.fill(door);

}

Modelling and transformation Java 2D 13/17

Page 110: Java2D - University of Exeterempslocal.ex.ac.uk/people/staff/pjk205/ECM2410/slides03.pdf · Basics Java 2D 2/17. Java2DBasics Device Output is to a Frame ... (Graphics g) {// Work

House.java – paint()

public void paint(Graphics g) {Graphics2D g2 = (Graphics2D)g; // Promote to 2D context

g2.setStroke(new BasicStroke(5));g2.setPaint(Color.red); // Interiorg2.fill(body);g2.setPaint(Color.black); // Borderg2.draw(body);

g2.setPaint(Color.cyan);g2.draw(roof);

g2.setPaint(Color.green);g2.fill(door);

}

Modelling and transformation Java 2D 13/17

Page 111: Java2D - University of Exeterempslocal.ex.ac.uk/people/staff/pjk205/ECM2410/slides03.pdf · Basics Java 2D 2/17. Java2DBasics Device Output is to a Frame ... (Graphics g) {// Work

House.java – paint()

public void paint(Graphics g) {Graphics2D g2 = (Graphics2D)g; // Promote to 2D context

g2.setStroke(new BasicStroke(5));g2.setPaint(Color.red); // Interiorg2.fill(body);g2.setPaint(Color.black); // Borderg2.draw(body);

g2.setPaint(Color.cyan);g2.draw(roof);

g2.setPaint(Color.green);g2.fill(door);

}

Modelling and transformation Java 2D 13/17

Page 112: Java2D - University of Exeterempslocal.ex.ac.uk/people/staff/pjk205/ECM2410/slides03.pdf · Basics Java 2D 2/17. Java2DBasics Device Output is to a Frame ... (Graphics g) {// Work

House.java – paint()

public void paint(Graphics g) {Graphics2D g2 = (Graphics2D)g; // Promote to 2D context

g2.setStroke(new BasicStroke(5));g2.setPaint(Color.red); // Interiorg2.fill(body);g2.setPaint(Color.black); // Borderg2.draw(body);

g2.setPaint(Color.cyan);g2.draw(roof);

g2.setPaint(Color.green);g2.fill(door);

}

Modelling and transformation Java 2D 13/17

Page 113: Java2D - University of Exeterempslocal.ex.ac.uk/people/staff/pjk205/ECM2410/slides03.pdf · Basics Java 2D 2/17. Java2DBasics Device Output is to a Frame ... (Graphics g) {// Work

House.java – paint()

public void paint(Graphics g) {Graphics2D g2 = (Graphics2D)g; // Promote to 2D context

g2.setStroke(new BasicStroke(5));g2.setPaint(Color.red); // Interiorg2.fill(body);g2.setPaint(Color.black); // Borderg2.draw(body);

g2.setPaint(Color.cyan);g2.draw(roof);

g2.setPaint(Color.green);g2.fill(door);

}

Modelling and transformation Java 2D 13/17

Page 114: Java2D - University of Exeterempslocal.ex.ac.uk/people/staff/pjk205/ECM2410/slides03.pdf · Basics Java 2D 2/17. Java2DBasics Device Output is to a Frame ... (Graphics g) {// Work

Draw House.java – Constructor / Main

import java.awt.*;import java.awt.geom.*;

public class DrawHouse extends ApplicationFrame {private House house = new House();

public DrawHouse() {super("DrawHouse");setSize(600, 600);center();setVisible(true);

}

public void paint(Graphics g) {. . .

}

public static void main(String[] args) {new DrawHouse();

}}

Modelling and transformation Java 2D 14/17

Page 115: Java2D - University of Exeterempslocal.ex.ac.uk/people/staff/pjk205/ECM2410/slides03.pdf · Basics Java 2D 2/17. Java2DBasics Device Output is to a Frame ... (Graphics g) {// Work

Draw House.java – Constructor / Main

import java.awt.*;import java.awt.geom.*;

public class DrawHouse extends ApplicationFrame {private House house = new House();

public DrawHouse() {super("DrawHouse");setSize(600, 600);center();setVisible(true);

}

public void paint(Graphics g) {. . .

}

public static void main(String[] args) {new DrawHouse();

}}

Modelling and transformation Java 2D 14/17

Page 116: Java2D - University of Exeterempslocal.ex.ac.uk/people/staff/pjk205/ECM2410/slides03.pdf · Basics Java 2D 2/17. Java2DBasics Device Output is to a Frame ... (Graphics g) {// Work

Draw House.java – Constructor / Main

import java.awt.*;import java.awt.geom.*;

public class DrawHouse extends ApplicationFrame {private House house = new House();

public DrawHouse() {super("DrawHouse");setSize(600, 600);center();setVisible(true);

}

public void paint(Graphics g) {. . .

}

public static void main(String[] args) {new DrawHouse();

}}

Modelling and transformation Java 2D 14/17

Page 117: Java2D - University of Exeterempslocal.ex.ac.uk/people/staff/pjk205/ECM2410/slides03.pdf · Basics Java 2D 2/17. Java2DBasics Device Output is to a Frame ... (Graphics g) {// Work

Draw House.java – Constructor / Main

import java.awt.*;import java.awt.geom.*;

public class DrawHouse extends ApplicationFrame {private House house = new House();

public DrawHouse() {super("DrawHouse");setSize(600, 600);center();setVisible(true);

}

public void paint(Graphics g) {. . .

}

public static void main(String[] args) {new DrawHouse();

}}

Modelling and transformation Java 2D 14/17

Page 118: Java2D - University of Exeterempslocal.ex.ac.uk/people/staff/pjk205/ECM2410/slides03.pdf · Basics Java 2D 2/17. Java2DBasics Device Output is to a Frame ... (Graphics g) {// Work

Draw House.java – Constructor / Main

import java.awt.*;import java.awt.geom.*;

public class DrawHouse extends ApplicationFrame {private House house = new House();

public DrawHouse() {super("DrawHouse");setSize(600, 600);center();setVisible(true);

}

public void paint(Graphics g) {. . .

}

public static void main(String[] args) {new DrawHouse();

}}

Modelling and transformation Java 2D 14/17

Page 119: Java2D - University of Exeterempslocal.ex.ac.uk/people/staff/pjk205/ECM2410/slides03.pdf · Basics Java 2D 2/17. Java2DBasics Device Output is to a Frame ... (Graphics g) {// Work

Draw House.java – Constructor / Main

import java.awt.*;import java.awt.geom.*;

public class DrawHouse extends ApplicationFrame {private House house = new House();

public DrawHouse() {super("DrawHouse");setSize(600, 600);center();setVisible(true);

}

public void paint(Graphics g) {. . .

}

public static void main(String[] args) {new DrawHouse();

}}

Modelling and transformation Java 2D 14/17

Page 120: Java2D - University of Exeterempslocal.ex.ac.uk/people/staff/pjk205/ECM2410/slides03.pdf · Basics Java 2D 2/17. Java2DBasics Device Output is to a Frame ... (Graphics g) {// Work

Draw House.java – Constructor / Main

import java.awt.*;import java.awt.geom.*;

public class DrawHouse extends ApplicationFrame {private House house = new House();

public DrawHouse() {super("DrawHouse");setSize(600, 600);center();setVisible(true);

}

public void paint(Graphics g) {. . .

}

public static void main(String[] args) {new DrawHouse();

}}

Modelling and transformation Java 2D 14/17

Page 121: Java2D - University of Exeterempslocal.ex.ac.uk/people/staff/pjk205/ECM2410/slides03.pdf · Basics Java 2D 2/17. Java2DBasics Device Output is to a Frame ... (Graphics g) {// Work

Draw House.java – Constructor / Main

import java.awt.*;import java.awt.geom.*;

public class DrawHouse extends ApplicationFrame {private House house = new House();

public DrawHouse() {super("DrawHouse");setSize(600, 600);center();setVisible(true);

}

public void paint(Graphics g) {. . .

}

public static void main(String[] args) {new DrawHouse();

}}

Modelling and transformation Java 2D 14/17

Page 122: Java2D - University of Exeterempslocal.ex.ac.uk/people/staff/pjk205/ECM2410/slides03.pdf · Basics Java 2D 2/17. Java2DBasics Device Output is to a Frame ... (Graphics g) {// Work

Draw House.java – paint()

Simply paint the house

public void paint(Graphics g) {Graphics2D g2 = (Graphics2D)g; // Promote to 2D contexthouse.paint(g); // Get House to paint itself

}

Translate to centre of Frame

public void paint(Graphics g) {Graphics2D g2 = (Graphics2D)g; // Promote to 2D context

// Translate the origin to middle of screenAffineTransform T =

AffineTransform.getTranslateInstance(300.0,300.0);g2.setTransform(T);

house.paint(g); // Get House to paint itself}

Modelling and transformation Java 2D 15/17

Page 123: Java2D - University of Exeterempslocal.ex.ac.uk/people/staff/pjk205/ECM2410/slides03.pdf · Basics Java 2D 2/17. Java2DBasics Device Output is to a Frame ... (Graphics g) {// Work

Draw House.java – paint()

Simply paint the house

public void paint(Graphics g) {Graphics2D g2 = (Graphics2D)g; // Promote to 2D contexthouse.paint(g); // Get House to paint itself

}

Translate to centre of Frame

public void paint(Graphics g) {Graphics2D g2 = (Graphics2D)g; // Promote to 2D context

// Translate the origin to middle of screenAffineTransform T =

AffineTransform.getTranslateInstance(300.0,300.0);g2.setTransform(T);

house.paint(g); // Get House to paint itself}

Modelling and transformation Java 2D 15/17

Page 124: Java2D - University of Exeterempslocal.ex.ac.uk/people/staff/pjk205/ECM2410/slides03.pdf · Basics Java 2D 2/17. Java2DBasics Device Output is to a Frame ... (Graphics g) {// Work

Draw House.java – paint()

Simply paint the house

public void paint(Graphics g) {Graphics2D g2 = (Graphics2D)g; // Promote to 2D contexthouse.paint(g); // Get House to paint itself

}

Translate to centre of Frame

public void paint(Graphics g) {Graphics2D g2 = (Graphics2D)g; // Promote to 2D context

// Translate the origin to middle of screenAffineTransform T =

AffineTransform.getTranslateInstance(300.0,300.0);g2.setTransform(T);

house.paint(g); // Get House to paint itself}

Modelling and transformation Java 2D 15/17

Page 125: Java2D - University of Exeterempslocal.ex.ac.uk/people/staff/pjk205/ECM2410/slides03.pdf · Basics Java 2D 2/17. Java2DBasics Device Output is to a Frame ... (Graphics g) {// Work

Draw House.java – paint()

Simply paint the house

public void paint(Graphics g) {Graphics2D g2 = (Graphics2D)g; // Promote to 2D contexthouse.paint(g); // Get House to paint itself

}

Translate to centre of Frame

public void paint(Graphics g) {Graphics2D g2 = (Graphics2D)g; // Promote to 2D context

// Translate the origin to middle of screenAffineTransform T =

AffineTransform.getTranslateInstance(300.0,300.0);g2.setTransform(T);

house.paint(g); // Get House to paint itself}

Modelling and transformation Java 2D 15/17

Page 126: Java2D - University of Exeterempslocal.ex.ac.uk/people/staff/pjk205/ECM2410/slides03.pdf · Basics Java 2D 2/17. Java2DBasics Device Output is to a Frame ... (Graphics g) {// Work

Draw House.java – paint()

Simply paint the house

public void paint(Graphics g) {Graphics2D g2 = (Graphics2D)g; // Promote to 2D contexthouse.paint(g); // Get House to paint itself

}

Translate to centre of Frame

public void paint(Graphics g) {Graphics2D g2 = (Graphics2D)g; // Promote to 2D context

// Translate the origin to middle of screenAffineTransform T =

AffineTransform.getTranslateInstance(300.0,300.0);g2.setTransform(T);

house.paint(g); // Get House to paint itself}

Modelling and transformation Java 2D 15/17

Page 127: Java2D - University of Exeterempslocal.ex.ac.uk/people/staff/pjk205/ECM2410/slides03.pdf · Basics Java 2D 2/17. Java2DBasics Device Output is to a Frame ... (Graphics g) {// Work

Draw House.java – paint()

Simply paint the house

public void paint(Graphics g) {Graphics2D g2 = (Graphics2D)g; // Promote to 2D contexthouse.paint(g); // Get House to paint itself

}

Translate to centre of Frame

public void paint(Graphics g) {Graphics2D g2 = (Graphics2D)g; // Promote to 2D context

// Translate the origin to middle of screenAffineTransform T =

AffineTransform.getTranslateInstance(300.0,300.0);g2.setTransform(T);

house.paint(g); // Get House to paint itself}

Modelling and transformation Java 2D 15/17

Page 128: Java2D - University of Exeterempslocal.ex.ac.uk/people/staff/pjk205/ECM2410/slides03.pdf · Basics Java 2D 2/17. Java2DBasics Device Output is to a Frame ... (Graphics g) {// Work

Draw House.java – paint()

Simply paint the house

public void paint(Graphics g) {Graphics2D g2 = (Graphics2D)g; // Promote to 2D contexthouse.paint(g); // Get House to paint itself

}

Translate to centre of Frame

public void paint(Graphics g) {Graphics2D g2 = (Graphics2D)g; // Promote to 2D context

// Translate the origin to middle of screenAffineTransform T =

AffineTransform.getTranslateInstance(300.0,300.0);g2.setTransform(T);

house.paint(g); // Get House to paint itself}

Modelling and transformation Java 2D 15/17

Page 129: Java2D - University of Exeterempslocal.ex.ac.uk/people/staff/pjk205/ECM2410/slides03.pdf · Basics Java 2D 2/17. Java2DBasics Device Output is to a Frame ... (Graphics g) {// Work

Draw House.java – paint()

Simply paint the house

public void paint(Graphics g) {Graphics2D g2 = (Graphics2D)g; // Promote to 2D contexthouse.paint(g); // Get House to paint itself

}

Translate to centre of Frame

public void paint(Graphics g) {Graphics2D g2 = (Graphics2D)g; // Promote to 2D context

// Translate the origin to middle of screenAffineTransform T =

AffineTransform.getTranslateInstance(300.0,300.0);g2.setTransform(T);

house.paint(g); // Get House to paint itself}

Modelling and transformation Java 2D 15/17

Page 130: Java2D - University of Exeterempslocal.ex.ac.uk/people/staff/pjk205/ECM2410/slides03.pdf · Basics Java 2D 2/17. Java2DBasics Device Output is to a Frame ... (Graphics g) {// Work

Draw House.java – paint()

Simply paint the house

public void paint(Graphics g) {Graphics2D g2 = (Graphics2D)g; // Promote to 2D contexthouse.paint(g); // Get House to paint itself

}

Translate to centre of Frame

public void paint(Graphics g) {Graphics2D g2 = (Graphics2D)g; // Promote to 2D context

// Translate the origin to middle of screenAffineTransform T =

AffineTransform.getTranslateInstance(300.0,300.0);g2.setTransform(T);

house.paint(g); // Get House to paint itself}

Modelling and transformation Java 2D 15/17

Page 131: Java2D - University of Exeterempslocal.ex.ac.uk/people/staff/pjk205/ECM2410/slides03.pdf · Basics Java 2D 2/17. Java2DBasics Device Output is to a Frame ... (Graphics g) {// Work

Draw House.java – paint()

Rotate and translate to centre of Frame

public void paint(Graphics g) {Graphics2D g2 = (Graphics2D)g; // Promote to 2D context

// Rotate by 180 degreesAffineTransform R = AffineTransform.getRotateInstance(Math.PI);

// Translate the origin to middle of screenAffineTransform T =

AffineTransform.getTranslateInstance(300.0,300.0);

T.concatenate(R); // Rotate, then translateg2.setTransform(T);

house.paint(g); // Get House to paint itself}

Modelling and transformation Java 2D 16/17

Page 132: Java2D - University of Exeterempslocal.ex.ac.uk/people/staff/pjk205/ECM2410/slides03.pdf · Basics Java 2D 2/17. Java2DBasics Device Output is to a Frame ... (Graphics g) {// Work

Draw House.java – paint()

Rotate and translate to centre of Frame

public void paint(Graphics g) {Graphics2D g2 = (Graphics2D)g; // Promote to 2D context

// Rotate by 180 degreesAffineTransform R = AffineTransform.getRotateInstance(Math.PI);

// Translate the origin to middle of screenAffineTransform T =

AffineTransform.getTranslateInstance(300.0,300.0);

T.concatenate(R); // Rotate, then translateg2.setTransform(T);

house.paint(g); // Get House to paint itself}

Modelling and transformation Java 2D 16/17

Page 133: Java2D - University of Exeterempslocal.ex.ac.uk/people/staff/pjk205/ECM2410/slides03.pdf · Basics Java 2D 2/17. Java2DBasics Device Output is to a Frame ... (Graphics g) {// Work

Draw House.java – paint()

Rotate and translate to centre of Frame

public void paint(Graphics g) {Graphics2D g2 = (Graphics2D)g; // Promote to 2D context

// Rotate by 180 degreesAffineTransform R = AffineTransform.getRotateInstance(Math.PI);

// Translate the origin to middle of screenAffineTransform T =

AffineTransform.getTranslateInstance(300.0,300.0);

T.concatenate(R); // Rotate, then translateg2.setTransform(T);

house.paint(g); // Get House to paint itself}

Modelling and transformation Java 2D 16/17

Page 134: Java2D - University of Exeterempslocal.ex.ac.uk/people/staff/pjk205/ECM2410/slides03.pdf · Basics Java 2D 2/17. Java2DBasics Device Output is to a Frame ... (Graphics g) {// Work

Draw House.java – paint()

Rotate and translate to centre of Frame

public void paint(Graphics g) {Graphics2D g2 = (Graphics2D)g; // Promote to 2D context

// Rotate by 180 degreesAffineTransform R = AffineTransform.getRotateInstance(Math.PI);

// Translate the origin to middle of screenAffineTransform T =

AffineTransform.getTranslateInstance(300.0,300.0);

T.concatenate(R); // Rotate, then translateg2.setTransform(T);

house.paint(g); // Get House to paint itself}

Modelling and transformation Java 2D 16/17

Page 135: Java2D - University of Exeterempslocal.ex.ac.uk/people/staff/pjk205/ECM2410/slides03.pdf · Basics Java 2D 2/17. Java2DBasics Device Output is to a Frame ... (Graphics g) {// Work

Draw House.java – paint()

Rotate and translate to centre of Frame

public void paint(Graphics g) {Graphics2D g2 = (Graphics2D)g; // Promote to 2D context

// Rotate by 180 degreesAffineTransform R = AffineTransform.getRotateInstance(Math.PI);

// Translate the origin to middle of screenAffineTransform T =

AffineTransform.getTranslateInstance(300.0,300.0);

T.concatenate(R); // Rotate, then translateg2.setTransform(T);

house.paint(g); // Get House to paint itself}

Modelling and transformation Java 2D 16/17

Page 136: Java2D - University of Exeterempslocal.ex.ac.uk/people/staff/pjk205/ECM2410/slides03.pdf · Basics Java 2D 2/17. Java2DBasics Device Output is to a Frame ... (Graphics g) {// Work

Draw House.java – paint()

Rotate and translate to centre of Frame

public void paint(Graphics g) {Graphics2D g2 = (Graphics2D)g; // Promote to 2D context

// Rotate by 180 degreesAffineTransform R = AffineTransform.getRotateInstance(Math.PI);

// Translate the origin to middle of screenAffineTransform T =

AffineTransform.getTranslateInstance(300.0,300.0);

T.concatenate(R); // Rotate, then translateg2.setTransform(T);

house.paint(g); // Get House to paint itself}

Modelling and transformation Java 2D 16/17

Page 137: Java2D - University of Exeterempslocal.ex.ac.uk/people/staff/pjk205/ECM2410/slides03.pdf · Basics Java 2D 2/17. Java2DBasics Device Output is to a Frame ... (Graphics g) {// Work

Draw House.java – paint()

Rotate and translate to centre of Frame

public void paint(Graphics g) {Graphics2D g2 = (Graphics2D)g; // Promote to 2D context

// Rotate by 180 degreesAffineTransform R = AffineTransform.getRotateInstance(Math.PI);

// Translate the origin to middle of screenAffineTransform T =

AffineTransform.getTranslateInstance(300.0,300.0);

T.concatenate(R); // Rotate, then translateg2.setTransform(T);

house.paint(g); // Get House to paint itself}

Modelling and transformation Java 2D 16/17

Page 138: Java2D - University of Exeterempslocal.ex.ac.uk/people/staff/pjk205/ECM2410/slides03.pdf · Basics Java 2D 2/17. Java2DBasics Device Output is to a Frame ... (Graphics g) {// Work

DrawHouse.java

No Transformations Translation Rotate, then translate

Draw objects in their own local coordinate system.

Use affine transformations to place them in the scene.

Modelling and transformation Java 2D 17/17

Page 139: Java2D - University of Exeterempslocal.ex.ac.uk/people/staff/pjk205/ECM2410/slides03.pdf · Basics Java 2D 2/17. Java2DBasics Device Output is to a Frame ... (Graphics g) {// Work

DrawHouse.java

No Transformations Translation Rotate, then translate

Draw objects in their own local coordinate system.

Use affine transformations to place them in the scene.

Modelling and transformation Java 2D 17/17

Page 140: Java2D - University of Exeterempslocal.ex.ac.uk/people/staff/pjk205/ECM2410/slides03.pdf · Basics Java 2D 2/17. Java2DBasics Device Output is to a Frame ... (Graphics g) {// Work

DrawHouse.java

No Transformations Translation Rotate, then translate

Draw objects in their own local coordinate system.

Use affine transformations to place them in the scene.

Modelling and transformation Java 2D 17/17

Page 141: Java2D - University of Exeterempslocal.ex.ac.uk/people/staff/pjk205/ECM2410/slides03.pdf · Basics Java 2D 2/17. Java2DBasics Device Output is to a Frame ... (Graphics g) {// Work

DrawHouse.java

No Transformations Translation Rotate, then translate

Draw objects in their own local coordinate system.

Use affine transformations to place them in the scene.

Modelling and transformation Java 2D 17/17

Page 142: Java2D - University of Exeterempslocal.ex.ac.uk/people/staff/pjk205/ECM2410/slides03.pdf · Basics Java 2D 2/17. Java2DBasics Device Output is to a Frame ... (Graphics g) {// Work

DrawHouse.java

No Transformations Translation Rotate, then translate

Draw objects in their own local coordinate system.

Use affine transformations to place them in the scene.

Modelling and transformation Java 2D 17/17

Page 143: Java2D - University of Exeterempslocal.ex.ac.uk/people/staff/pjk205/ECM2410/slides03.pdf · Basics Java 2D 2/17. Java2DBasics Device Output is to a Frame ... (Graphics g) {// Work

DrawHouse.java

No Transformations Translation Rotate, then translate

Draw objects in their own local coordinate system.

Use affine transformations to place them in the scene.

Modelling and transformation Java 2D 17/17