package ip.gui.frames;
import ip.gui.ImageSequence;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.FilenameFilter;
import java.net.MalformedURLException;
import java.net.URL;
public class AnimateFrame
extends ShortCutFrame
implements ActionListener {
private String homeDir =
"http://www.docjava.com/java/images/";
private String roadImgs =
homeDir + "road.imgs";
private MenuBar menuBar = new MenuBar();
Menu fileMenu = getMenu("File");
Menu openMenu = getMenu("Open");
MenuItem save_mi
= addMenuItem(fileMenu, "save *.imgs...");
MenuItem open_mi
= addMenuItem(openMenu, "*.imgs...");
MenuItem openGifs_mi
= addMenuItem(openMenu, "*.gifs...");
MenuItem openRoadImgs_mi
= addMenuItem(openMenu, roadImgs);
MenuItem start_mi
= addMenuItem(fileMenu, "start");
MenuItem stop_mi
= addMenuItem(fileMenu, "stop");
MenuItem fhaar_mi
= addMenuItem(fileMenu, "forward haar");
MenuItem bhaar_mi
= addMenuItem(fileMenu, "backward haar");
public boolean running = true;
private ImageSequence imgSeq
= new ImageSequence();
public void setRunning(boolean t) {
running = t;
}
public String[] getFileNames() {
FileDialog fd = new FileDialog(
new Frame(), "find gifs");
fd.show();
String dir = fd.getDirectory();
FileFilter files = new FileFilter();
File f = new File(dir);
String fn[] = f.list(files);
for (int i = 0; i < fn.length; i++)
fn[i] = dir + fn[i];
return fn;
}
public void actionPerformed(ActionEvent e) {
Object c = e.getSource();
if (c == fhaar_mi) {
fhaar();
return;
}
if (c == bhaar_mi) {
bhaar();
return;
}
if (c == openRoadImgs_mi) {
openRoadImgs();
return;
}
if (c == save_mi) {
saveImages();
return;
}
if (c == open_mi) {
openImages();
return;
}
if (c == openGifs_mi) {
openGifs();
return;
}
if (c == start_mi) {
setRunning(true);
return;
}
if (c == stop_mi) {
setRunning(false);
return;
}
}
public AnimateFrame() {
super("AnimateFrame");
fileMenu.add(openMenu);
menuBar.add(fileMenu);
setMenuBar(menuBar);
setSize(64, 64);
}
public void fhaar() {
setRunning(false);
imgSeq.forwardHaar();
setRunning(true);
}
public void bhaar() {
imgSeq.backwardHaar();
}
public void saveImages() {
imgSeq.save();
}
public void openImages() {
imgSeq.open();
setVisible(true);
}
public void openRoadImgs() {
try {
imgSeq.open(
new URL(roadImgs));
} catch (MalformedURLException e) {
e.printStackTrace();
}
setSize(imgSeq.getWidth(), imgSeq.getHeight());
setVisible(true);
setRunning(true);
}
public void addImage(Image img) {
imgSeq.add(img);
imgSeq.setWidth(img.getWidth(this));
imgSeq.setHeight(img.getHeight(this));
}
public void update(Graphics g) {
paint(g);
}
public void paint(Graphics g) {
if (imgSeq.getSize() == 0) return;
if (!running) return;
Rectangle r = getBounds();
g.drawImage(imgSeq.next(), 0, 0, r.width, r.height,
this);
repaint(33);
}
void waitForImage(Component component,
Image image) {
MediaTracker tracker = new MediaTracker(component);
try {
tracker.addImage(image, 0);
tracker.waitForID(0);
if (!tracker.checkID(0))
System.out.println("Load failure!");
} catch (InterruptedException e) {
}
}
public void openGifs(String fileNames[]) {
Toolkit tk = Toolkit.getDefaultToolkit();
for (int i = 0; i < fileNames.length; i++) {
Image img = tk.getImage(fileNames[i]);
waitForImage(this, img);
addImage(img);
}
setVisible(true);
}
public void openGifs() {
String files[] = getFileNames();
openGifs(files);
setSize(imgSeq.getWidth(),
imgSeq.getHeight());
}
class FileFilter implements FilenameFilter {
public boolean accept(File dir, String name) {
return new File(dir, name).exists();
}
}
}