Programmgesteuertes Zeichnen Freihandzeichnen Das Ballprojekt Autorennen Weitere Beispiele Der Zug n-Damen-Problem Drucken mit stiftUndCo Türme von Hanoi |
Seit Einführung des Sprachstandards 1.1 von JAVA ist Drucken
aus JAVA-Anwendungen heraus möglich. Sicherheitsbedenken verbieten dies
jedoch für Applets. Die Druckfähigkeiten sind jedoch auch für Anwendungen noch recht
einfach und schöpfen die Auflösung der zur Verfügung stehenden Drucker nicht aus. Um
im Rahmen der Bibliothek stiftUndCo eine Druckmöglichkeit
zu eröffnen, habe ich eine Klasse Blatt entworfen, deren
Funktionalität weitgehend einem Bildschirm entspricht.
Die Klasse Blatt repräsentiert ein Papierblatt .
Mit Hilfe von Stiften kann auf einem Blatt gezeichnet und
geschrieben werden, genauso wie auf einem Bildschirm. Im
Folgenden zeigt ein Beispiel, eine modifizierte Kochsche Kurve (s. auch als Applet), die Verwendung des Blattes. Im
Anschluß werden die spezifischen Eigenheiten seiner Verwendung erläutert.
Beachten Sie bitte, dass die Klasse Blatt einen ersten
Versuch darstellt, um die Druckmöglichkeiten in die Bibliothek einzubinden. Wenn Sie die
Klasse ausprobieren wollen, müssen Sie eine Anwendung erstellen!
Quelltext der Kochschen Kurve mit Ausdruck:
import stiftUndCo.*;
// Kochsche Kurve
public class KochDruck {
private Bildschirm bildschirm;
private BuntStift stift,stift2;
private Blatt blatt;
private int rot,grün,blau;
public static void main(String[] s)
{
KochDruck druckeKoch = new KochDruck();
druckeKoch.los(5);
druckeKoch.gibFrei();
}
public void los(int n)
{
bildschirm = new Bildschirm();/* 1 */
stift2=new BuntStift();
stift2.bewegeBis(10,50);
stift2.schreibe("Es wird eine Kochsche Kurve gedruckt");
blatt = new Blatt();/* 2 */
stift = new BuntStift(blatt);/* 3 */
stift.bewegeBis (100,330);
stift.runter();
stift.dreheBis(60);
figur(n);
blatt.drucke();/* 4 */
}
private void grundfigur ( int n)
{
if (n==1)
{
stift.bewegeUm(3.5);
rot=Hilfe.zufall(0,255);
grün=Hilfe.zufall(0,255);
blau=Hilfe.zufall(0,255);
stift.setzeFarbe(Farbe.rgb(rot,grün,blau));
}
else {
grundfigur (n-1);
if (n > 4) { figur(3); }
stift.dreheUm (60);
grundfigur (n-1);
if (n>4) { figur(3); }
stift.dreheUm (-120);
grundfigur (n-1);
if (n>4) { figur(3); }
stift.dreheUm (60);
grundfigur (n-1);
if (n>4) { figur(3); }
}
}
private void figur (int n) {
for (int i=1;i<4;i++){
grundfigur (n);
stift.dreheUm(-120);
}
}
public void gibFrei()
{
if( stift != null)
{
stift.gibFrei();
}
if( blatt != null)
{
blatt.gibFrei();
}
}
}
Erläuterung:
Zunächst (s. /* 1 */) wird ein Bildschirm(!) erzeugt,
danach ein Blatt(s. /* 2 */) . Bevor ein Blatt erzeugt
wird, muß(!) ein Bildschirm vorhanden sein. In einem weiteren Schritt wird ein Stift
generiert, der das Blatt kennenlernt (s. /* 3 */). Wenn
die Zeichnung fertig ist, wird das Blatt gedruckt. (s. /* 4 */).
Der Umgang mit dem Blatt unterscheidet sich kaum von dem Umgang mit dem Bildschirm. Sie
könnten, abgesehen von Zeile /* 4 */ (blatt.drucke();), an Stelle eines Blattes einen Bildschirm im
Programm benutzen.
Wenn Sie das Programm ausprobieren, werden Sie feststellen, dass Sie unmittelbar nach
dem Start des Programms den üblichen Druckerdialog vor sich haben. Der Druckerdialog wird
durch die Initialisierung des Blattes erzeugt und nicht durch die Nachricht drucke(). Die Gründe hierfür liegen in spezifischen
Eigenheiten der Implementierung der Druckmöglichkeiten unter JAVA. Im Prinzip könnte das
zwar geändert werden, es machte die Blatt-Implementierung jedoch wesentlich komplexer. Zu
einem späteren Zeitpunkt, wenn entsprechende Erfahrungen mit dem Blatt vorliegen, kann
eine Änderung erfolgen. Geben Sie bitte auch Ihre Wünsche und Erfahrungen an mich
weiter. |