Download presentation
Presentation is loading. Please wait.
Published byAlbert Alexander Modified over 9 years ago
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 http://java.sun.com/
Similar presentations
© 2024 SlidePlayer.com Inc.
All rights reserved.