Presentation is loading. Please wait.

Presentation is loading. Please wait.

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

Similar presentations


Presentation on theme: "Applications of Java to Physics Teaching (Part II) S S Tong Department of Physics CUHK."— Presentation transcript:

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

2 6. Simple Animations 4 Animations –many frames displayed in a given order 4 Thread –part of the program running on its own –multi-tasking (actually multi-threading) 4 How to –create a thread? –display the frames? –terminate the thread under certain conditions?

3  Implement the interface Runnable  Declare a Thread public class Spin extends Applet implements Runnable { Thread runner = null; }  Create and run a Thread runner = new Thread(this); runner.start(); 4 Load a series of image for (int i = 0; i < 16; i++) spin[i] = getImage(getCodeBase(), "images/Spin" + i + ".gif"); calls the run() method

4  Create a loop, call the paint method repeatedly public 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); }

5 4 Flow of the applet run() loop inside while (...) { } paint(...) draw images runner.start() repaint() init() images loaded...getImage(...) Thread created and initialized...new Thread(this) call paint(...) once 4 Stop a thread runner.stop(); runner = null;

6 4 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

7 4 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 Graphicserasing off-screen drawing off-screen put the off-screen image on-screen

8 7 Building simple interface 4 Basic components Label Button Checkbox Choice TextField

9 4 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 applet add(...);

10 4 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 colorset size –repaint the canvas canvas.repaint();

11 4 How to arrange the components? –Use Layout Manager  We discuss the BorderLayout() only public void init() { setLayout(new BorderLayout()); North South CenterEastWest

12 –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);

13 4 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 component button1.addActionListener(this); theChoice.addItemListener(this); theCheckbox.addItemListener(this);

14 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

15 –Updating the canvas import 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

16 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)); } 4 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 the superclass's constructor string  double double  string

17  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

18 4 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 component canvas.addMouseListener(this); canvas.addMouseMotionListener(this); Listeners are interfaces

19 –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();

20  Example AddVectors.java –addition and subtraction of two vectors –changing the text fields updates the screen –dragging the vectors updates the text fields

21 8 References 4 L. Lemay and R. Cadenhead, Teach Yourself Java 2 in 21 days, SAMS 4 M. Campione and K. Walrath, The Java Tutorial (2nd Ed), Addison Wesley 4


Download ppt "Applications of Java to Physics Teaching (Part II) S S Tong Department of Physics CUHK."

Similar presentations


Ads by Google