import ij.*; import ij.plugin.PlugIn; import java.awt.*; import java.awt.event.*; import java.applet.*; import java.io.IOException; import quicktime.*; import quicktime.io.*; import quicktime.std.movies.*; import quicktime.std.movies.media.*; import quicktime.app.view.*; //Revised code to display a QuickTime movie in a window under Java 1.4.x and QuickTime 6.4, aka QTJ 6.1 //Version 1.0 beta 1, November 22, 2003 by Jeff Hardin, Dept. of Zoology, Univ. of Wisconsin //Questions? Contact the author at jdhardin@wisc..edu //Adapted from basic code courtesy of Chris Adamson, c/o the O'Reilly Network //Window resize detection appears broken under Mac OS X 10.3, JavaVM 1.4.1 for the moment public class Movie_Player_rev implements PlugIn,WindowListener,KeyListener,ComponentListener { public Frame f2; public Movie m; public Component c; public MovieController mc; public void run (String arg) { try { QTSession.open(); QTFile f = QTFile.standardGetFilePreview (new int[0]); OpenMovieFile omf = OpenMovieFile.asRead (f); m = Movie.fromFile (omf); mc = new MovieController (m); mc.setVisible(true); //need the next line to send key events to the movie controller so we can simulate the arrow key functions Apple broke mc.setKeysEnabled(true); c = QTFactory.makeQTComponent (mc).asComponent(); c.setName("Controller"); f2 = new Frame(); //f2.setTitle("Movie"); f2.setTitle(f.getName()); f2.addWindowListener(this); f2.addKeyListener(this); f2.addComponentListener(this); f2.setName("Window"); BorderLayout myLayout = new BorderLayout(); //Under Mac OS X and Java 1.4, add a little space at bottom so that //drag box doesn't overlap with right arrow button in movie controller. Way to go, Apple! :-( f2.setLayout(myLayout); f2.add(c,"Center"); Panel myPanel = new Panel(); f2.add(myPanel,"South"); f2.pack(); //Under Mac OS X, resize events aren't properly registered, so turn off resizing for now. Arghhh!!!! f2.setResizable(false); f2.setVisible(true); } catch (Exception e) { e.printStackTrace(); } } public void windowClosing (WindowEvent e) { QTSession.close(); f2.setVisible(false); f2.dispose(); } public void windowClosed (WindowEvent e) { } public void windowOpened (WindowEvent e) { } public void windowActivated (WindowEvent e) { } public void windowDeactivated (WindowEvent e) { } public void windowIconified (WindowEvent e) { } public void windowDeiconified (WindowEvent e) { } public void keyPressed (KeyEvent e) { try { //need to pass MovieController.key() an int corresponding to standard Java key code; initialize it here int myInt = 0; switch (e.getKeyCode()) { case KeyEvent.VK_SPACE: //play the movie forward by setting rate to +1 if (m.getRate() != 0) m.setRate (0); else m.setRate (1); break; case KeyEvent.VK_LEFT: myInt = KeyEvent.VK_LEFT; mc.key(myInt,e.getModifiers()); break; case KeyEvent.VK_RIGHT: myInt = KeyEvent.VK_RIGHT; mc.key (myInt,e.getModifiers()); break; default: break; } } catch (QTException ee) { throw new QTRuntimeException (ee); } } public void keyReleased (KeyEvent e) {} public void keyTyped (KeyEvent e) {} public void componentResized (ComponentEvent e) { //Seems to be broken for now under Mac OS X and Java 1.4.1 VM; only gets increases in size, but not decreases! } public void componentHidden (ComponentEvent e) {} public void componentMoved (ComponentEvent e) {} public void componentShown (ComponentEvent e) {} }