import java.awt.*; import java.util.Vector; /** * Eine Klasse, die Bilder in einer Komponente anzeigt. Die Bilder werden als * Vector übergeben. */ public class ImageCanvas extends Canvas { Image current; Vector images; int index = 0; MediaTracker tracker; ImageCanvas(Vector images) { // Die Daten werden an einen MediaTracker übergeben. Jedes Bild bekommt // eine eigene ID, die mit dem Index im Vector übereinstimmt. tracker = new MediaTracker(this); for (int i=0; i < images.size(); i++) { tracker.addImage((Image)images.elementAt(i), i); } // Der MediaTracker startet nun mit dem Laden der Bilder. // Der Ladevorgang erfolgt im Hintergrund. Wir warten nicht darauf, // dass die Bilder fertig geladen sind. try { tracker.waitForAll(0); } catch (Exception e) {} // Das erste Bild wird angezeigt. this.images = images; showImage(0); } /** * Das nächste Bild soll angezeigt werden. Ist das aktuelle Bild das * letzte in der Liste, wird das erste Bild angezeigt. */ public void nextImage() { index++; if (index >= images.size()) index = 0; showImage(index); } /** * Das vorhergehende Bild soll angezeigt werden. Ist das aktuelle Bild * das erste in der Liste, wird das letzte Bild angezeigt. */ public void previousImage() { index--; if (index < 0) index = images.size()-1; showImage(index); } /** * Ein neues Bild soll angezeigt werden. */ public void showImage(int index) { // Zunächst das Bild aus der Liste der Bilder holen current = (Image)images.elementAt(index); try { // Evtl. ist das Bild noch nicht komplett geladen. Dann so lange // warten, bis das Bild komplett geladen ist. tracker.waitForID(index); // Der Anzeigebereich wird der Bildgrösse angepasst setSize(current.getWidth(this), current.getHeight(this)); // Das neue Bild darstellen und dem Parent benachrichtigen, dass sich // die Grösse der Komponente verändert hat. repaint(); getParent().validate(); } catch (Exception e) {} } /** * Die Komponente - und damit das Bild - werden gezeichnet. */ public void paint(Graphics g) { // Das Bild zeichnen. g.drawImage(current, 0, 0, this); } } --- Neue Klasse --- import java.awt.*; import java.awt.event.*; import java.applet.*; import java.util.*; public class SlideShowApplet extends Applet implements ActionListener { Button nextButton; /* Nächstes Bild */ Button prevButton; /* Vorheriges Bild */ ImageCanvas imageCanvas; /* Bildanzeige */ public void init() { // Die Bilder erstellen und in einem Vector speichern. Die Bilder werden // allerdings noch nicht geladen!! Vector imageVector = new Vector(); String name; for (int i=0; (name = getParameter("image"+i)) != null; i++) { Image image = getImage(getCodeBase(), name); imageVector.addElement(image); } // Bildbereich und Buttons erzeugen und im Applet anordnen. nextButton = new Button("weiter"); prevButton = new Button("zurück"); imageCanvas = new ImageCanvas(imageVector); ScrollPane scrollPane = new ScrollPane(ScrollPane.SCROLLBARS_AS_NEEDED); imageCanvas = new ImageCanvas(imageVector); scrollPane.add(imageCanvas); Panel buttons = new Panel(new FlowLayout(FlowLayout.CENTER)); nextButton.setActionCommand("next"); nextButton.addActionListener(this); prevButton.setActionCommand("prev"); prevButton.addActionListener(this); buttons.add(prevButton); buttons.add(nextButton); setLayout(new BorderLayout()); add("Center", scrollPane); add("South", buttons); } /* * Klicken auf einen der Buttons abfangen und entsprechend das nächste * oder das vorhergehende Bild anzeigen */ public void actionPerformed(ActionEvent e) { if ("prev".equals(e.getActionCommand())) { imageCanvas.previousImage(); } else { imageCanvas.nextImage(); } } } --- HTML-Seite --- Laden von Bildern

SlideShow