!!! Listing 1: Class.Interface interface Drucken { void drucke(); } class Klasse1 implements Drucken { void drucke() { // Hier das Drucken der Klasse1 implementieren } /* drucke */ } class Klasse2 implements Drucken { void drucke() { // Hier das Drucken der Klasse2 implementieren } /* drucke */ } !!! Listing 2: Scribble import java.applet.*; import java.awt.*; public class Scribble extends Applet { private int last_x = 0; private int last_y = 0; // Wird aufgerufen, wenn der Anwender irgendeine Maustaste // drueckt. public boolean mouseDown(Event e, int x, int y) { last_x = x; last_y = y; return true; } /* mouseDown */ // Wird aufgerufen, wenn die Maus mit einer // gedrueckten Maustaste bewegt wird. public boolean mouseDrag(Event e, int x, int y) { Graphics g = getGraphics(); g.drawLine(last_x, last_y, x, y); last_x = x; last_y = y; return true; } /* mouseDrag */ } !!! Listing 3: ColorScribble import java.applet.*; import java.awt.*; public class ColorScribble extends Scribble { // Liest zwei Parameter ein: Vorder- und Hintergrundfarbe. // Setzt die Farben entsprechend. public void init() { super.init(); Color foreground = getColorParameter("foreground"); Color background = getColorParameter("background"); if (foreground != null) this.setForeground(foreground); if (background != null) this.setBackground(background); } /* init */ // Liest die spezifizierten Parameter, interpretiert sie als // hexadezimale Werte in der Form RRGGBB und konvertiert sie // in eine Farbe. protected Color getColorParameter(String name) { String value = this.getParameter(name); int intvalue; try { intvalue = Integer.parseInt(value, 16); } catch (NumberFormatException e) { return null; } return new Color(intvalue); } /* getColorParameter */ // Gibt Info ueber die unterstuetzten Parameter zurueck. // Web browser und Applet Viewer sollten diese Information anzeigen. public String[][] getParameterInfo() { String[][] info = { // Array von String-Arrays, die jeden Parameter beschreiben // Format: Parameter-Name, Parameter-Typ, Parameter-Beschreibung {"foreground", "hexidecimal color value", "foreground color"}, {"background", "hexidecimal color value", "background color"} }; return info; } /* getParameterInfo */ // Gibt Info ueber das Applet zurueck zum Anzeigen // in entprechenderMessageBox. public String getAppletInfo() { return "Scribble, Beispiel fuer Java-Tutorial\nArbeiten mit Packages"; } /* getAppletInfo */ } !!! Listing 4: CS.html ColorScribble-Applet

Dr¨cken Sie eine Maustaste und malen Sie in das Window, Achtung: Dieses Applet kann seinen Inhalt nicht neu aufbauen.



!!! Listing 5: Animator.java import java.applet.*; import java.awt.*; import java.net.*; import java.util.*; public class Animator extends Applet implements Runnable { protected Image[] images; protected int current_image; // Liest den Namen der Bilder (sie heissen ) // und die Anzahl der Bilder. // Dann werden die Bilder ueber den basename geladen. // Die Bilder liegen in einem Directory images, relativ zur // aktuellen URL. public void init() { String basename = this.getParameter("basename"); int num_images; try { num_images = Integer.parseInt(this.getParameter("num_images")); } catch (NumberFormatException e) { num_images = 0; } images = new Image[num_images]; for(int i = 0; i < num_images; i++) { images[i] = this.getImage(this.getDocumentBase(), basename + i); } } /* init */ // Thread, der die Animation betreibt und die Methoden zum // Starten und Stoppen der Animation private Thread animator_thread = null; public void start() { if (animator_thread == null) { animator_thread = new Thread(this); animator_thread.start(); } } /* start */ public void stop() { if ((animator_thread != null) && animator_thread.isAlive()) animator_thread.stop(); // Das wird gemacht, damit der Garbage Collector das // Thread-Objekt wieder einsammeln kann. Ansonst wuerde der // Web-Browser damit lange Zeit belastet werden. animator_thread = null; } /* stop */ // Das ist der Koerper des Threads, diese Methode realisiert // die Animation public void run() { while(true) { if (++current_image >= images.length) current_image = 0; this.getGraphics().drawImage(images[current_image], 0, 0, this); this.getToolkit().sync(); try { Thread.sleep(200); } catch (InterruptedException e) ; } } /* run */ } !!! Listing 6: Grep.java import java.io.*; // Diese Klasse verwendet GrepInputStream. Sie gibt die Zeilen // der Datei aus, die den angegebenen String enthalten. public class Grep { public static void main(String args[]) { if ((args.length == 0) || (args.length > 2)) { System.out.println("Usage: java Grep []"); System.exit(0); } try { DataInputStream d; if (args.length == 2) d = new DataInputStream(new FileInputStream(args[1])); else d = new DataInputStream(System.in); GrepInputStream g = new GrepInputStream(d, args[0]); String line; for(;;) { line = g.readLine(); if (line == null) break; System.out.println(line); } g.close(); } catch (IOException e) System.err.println(e); } // main } !!! Listing 6: GrepInputStream.java import java.io.*; // Diese KLasse filtert alle Zeilen aus, die nicht in einem Substring // enthalten sind public class GrepInputStream extends FilterInputStream { String substring; DataInputStream in; public GrepInputStream(DataInputStream in, String substring) { super(in); this.in = in; this.substring = substring; } // GrepInputStream // Das ist der Filter: Es liest Zeile fuer Zeile vom DataInputStream // liefert aber nur Zeilen zurueck, die den Substring enthalten. // Wenn DataInputStream null zurueckliefert, wird hier auch null // zurueckgeliefert. public final String readLine() throws IOException { String line; do { line = in.readLine(); } while ((line != null) && line.indexOf(substring) == -1); return line; } // readLine }