applications of java to physics teaching (part ii) s s tong department of physics cuhk

21
Applications of Java Applications of Java to to Physics Teaching (Part Physics Teaching (Part II) II) S S Tong S S Tong Department of Physics Department of Physics CUHK CUHK

Upload: albert-alexander

Post on 16-Dec-2015

213 views

Category:

Documents


0 download

TRANSCRIPT

Applications of Java to Applications of Java to Physics Teaching (Part II)Physics Teaching (Part II)

S S TongS S Tong

Department of PhysicsDepartment of Physics

CUHKCUHK

6. Simple Animations

Animations– many frames displayed in a given order

Thread– part of the program running on its own

– multi-tasking (actually multi-threading)

How to– create a thread?

– display the frames?

– terminate the thread under certain conditions?

Implement the interface Runnable Declare a Thread

public class Spin extends Applet implements Runnable {Thread runner = null;......

}

Create and run a Threadrunner = new Thread(this);runner.start();

Load a series of imagefor (int i = 0; i < 16; i++)

spin[i] = getImage(getCodeBase(), "images/Spin" + i + ".gif");

calls the run() method

Create a loop, call the paint method repeatedlypublic void run() {

int i = 0;while (runner != null) {

currentImage = spin[i];repaint();i++;if (i > 15) i = 0;pause(50);

}}

public void paint(Graphics screen) {if (currentImage != null) {

screen.drawImage(currentImage, 100, 100, this);

......}

}

Flow of the applet

run()

loop insidewhile (...) { ......}

paint(...)

draw images

runner.start()

repaint()

init()

imagesloaded...getImage(...)

Thread created and initialized...new Thread(this)

call paint(...)once

Stop a threadrunner.stop();runner = null;

Reduce flickering– Override the update(...) method, so that the screen

is not erased before repainting

– Create an off-screen image and a Graphics object• do all drawing on the off-screen image first

• replace the on-screen image with the updated off-screen image

......Graphics offScreen;Image offScreenImage;

public void init() {offScreenImage = createImage(300,300);

......

public void update(Graphics screen) {paint(screen);

}call the paint method directly

Reduce flickering (contiune)

public void paint(Graphics screen) {j++;

offScreen = offScreenImage.getGraphics();if (currentImage != null) {

offScreen.setColor(Color.white);offScreen.fillRect(0,0,300,300);offScreen.drawImage(currentImage,

100, 100, this);offScreen.setColor(Color.red);offScreen.drawString("Frame no " + j,

30, 30);screen.drawImage(offScreenImage,

0, 0, this);}

}

associate the off-screen image and Graphics

erasing off-screen

drawing off-screen

put the off-screenimage on-screen

7 Building simple interface

Basic components

Label

Button

Checkbox

Choice

TextField

Adding components to an applet– Declare the object type

theButton = new Button("I am a button");

theCheckbox = new Checkbox("I am a checkbox");

theChoice = new Choice();theChoice.add("I am item 1");theChoice.add("I am item 2");theChoice.add("I am item 3");

theField = new TextField("long field", 20);

Button theButton;Checkbox theCheckbox;Choice theChoice;TextField theField;

– Assign labels and attributes to the components

items

lengthcontents

– Add the components to the appletadd(...);

Canvas - an area for drawing– create a subclass of Canvas

class MyCanvas extends Canvas {

MyCanvas() {setBackground(Color.cyan);setSize(300,300);

}

public void paint(Graphics screen) {......

}}

– create an instance of this subclass in the applet

canvas = new MyCanvas();

draw something on the canvas

set background color

set size

– repaint the canvas

canvas.repaint();

How to arrange the components?– Use Layout Manager

We discuss the BorderLayout() only

public void init() {setLayout(new BorderLayout());......

North

South

Center EastWest

– Adding components

add("South", buttonA);add("Center", canvasB);

– Using a panel

Panel p = new Panel();

p.add(theLabel);p.add(theButton);......add("South",p)

add("Center", canvas);

Firing events from the components– Listeners:

ActionListener for Button

ItemListener for Choice and Checkbox

– Implementing the Listeners

import java.awt.event.*;

public class EventTest extends Applet implements ActionListener, ItemListener { ......

Listeners are interfaces

– Adding Listeners to the componentbutton1.addActionListener(this);theChoice.addItemListener(this); theCheckbox.addItemListener(this);

public void itemStateChanged(ItemEvent evt) {if (evt.getSource() == theChoice) { int itemNo = theChoice.getSelectedIndex();

.......if (evt.getSource() == theCheckbox) { boolean boxState = theCheckbox.getState();

.......

– Buttons trigger the actionPerformed method

public void actionPerformed(ActionEvent evt) {if (evt.getSource() == button1) ......if (evt.getSource() == button2) ......canvas.repaint();

} identify which component triggers the event

– Choice menus and checkboxes trigger itemStateChanged method

get the index of the selected item

get the state (true/false) of the checkbox

– Updating the canvasimport java.awt.event.*;........public class EventTest extends Applet implements

ActionListener, ItemListener {

String currentString = "";......

public void actionPerformed(ActionEvent evt) {...... canvas.repaint();

}

public void itemStateChanged(ItemEvent evt) {...... canvas.repaint();

}

class EventCanvas extends Canvas {.......screen.drawString(currentString, 50, 50);......

}}

EventCanvas is defined inside EventTest- an inner class

class MyTextField extends TextField {

MyTextField(String s, int l) {super(s,l);

}

double getNumber() {return Double.valueOf(

getText()).doubleValue();}void setNumber(double num) {

setText(String.valueOf(num));}

}

Number I/O for a TextField

field.getText() gives the text of field

field.setText("string") sets the text of field to "string"

– Converting numbers to strings and vice versa

call to thesuperclass'sconstructor

string double

double string

Example AnimateWaves.java– superposition of two waves

– amplitude, wavelengths, periods read from text fields

– mode of display - choice menu

– start and stop - buttons

Exercise ProjectileEx.java– initial position and velocity read from text fields

– start and reset - buttons

Example ShootHead.java– Modification of Projectile.java– Shooting a free-falling object

Listening to mouse events– Listeners:

MouseListener mouse pressed, released, enter, exit

MouseMotionListener mouse moved, dragged

– Implementing the Listeners

import java.awt.event.*;

public class EventTest extends Applet implements MouseListener,

MouseMotionListener { ......

– Adding Listeners to the componentcanvas.addMouseListener(this);canvas.addMouseMotionListener(this);

Listeners are interfaces

– Let the canvas listens to mouse events

– Interact with hot spots, drag and drop objects etc.

public void mouseMoved(MouseEvent evt) {...}

public void mouseDragged(MouseEvent evt) {...}

public void mousePressed(MouseEvent evt) {...}

public void mouseClicked(MouseEvent evt) {...}

public void mouseReleased(MouseEvent evt) {...}

public void mouseEntered(MouseEvent evt) {...}

public void mouseExited(MouseEvent evt) {...}

– Mouse motion events trigger

– Mouse events trigger

– Gets the mouse position inside this methods e.g.,

Point p = evt.getPoint();

Example AddVectors.java– addition and subtraction of two vectors

– changing the text fields updates the screen

– dragging the vectors updates the text fields

8 References

L. Lemay and R. Cadenhead, Teach Yourself Java 2 in 21 days, SAMS

M. Campione and K. Walrath, The Java Tutorial (2nd Ed), Addison Wesley

http://java.sun.com/