!!! 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
}