Daniel Thoma: Problem beim Drucken

Beitrag lesen

Hallo Chris,

int j = 0;
int y = (int)pf.getImageableY()+5;

while (anzahl>0) {
  while (y<pf.getImageableHeight()-5) {
    g.drawString(String.valueOf(Ausgabe.get(j)),(int)(pf.getImageableX()+5),y);
    y += 20;
    g.dispose();
  }
  g.dispose();
  anzahl--;
  y = (int)pf.getImageableY()+5;
}

Du hast hier 2 Laufvariablen j und y. j dient wohl dazu, die einzelnen Elemente durchzugehen, wärend y dazu dient, die Position des Textes auf dem Blatt zu verschieben. An dieser Stelle while statt for Schleifen zu verwenden, ist schon keine gute Idee, da man mit while-Schleifen viel schneller fehler macht, als mit for-Schleifen.
Außerdem ist mir Schleierhaft, warum Du zwei Schleifen ineinander verschachtelst. Mit der äußeren erreichst Du, das die innere Schleife für jedes Element aufgerufen wird. Mit der inneren erreichst Du dann, dass drawString so lange für EIN Element aufgerufen wird, wie auf der Seite platz ist.
Das ist aber natürlich nicht der Grund, dass gar nichts ausgedruckt wird. Das liegt vermutlich daran, dass Du dispose() aufrufst. Wie bist Du denn darauf gekommen, das zu tun? Die Methode dient dazu, die resourcen, die ein Graphics Objekt belegt explizit frei zu geben. Da Graphics Objekte recht groß werden können und der Garbage Collector sie u.U. erst sehr spät löscht, gibt es diese Methode.
Darum muss man sich aber nur kümmern, wenn man Graphics Objekte selbst erzeugt. In den meisten Fällen bekommt man aber wie in diesem ein Graphics Objekt übergeben und muss sich nicht darum kümmern, was weiter damit passiert. Wenn Du nun trozdem diese Methode aufrufst, werden natürlich alle Daten im Graphics Objekt gelöscht.

Noch ein kleines (ungetestetes) Beispiel, das das tut, was Du wohl mit dem oben zitierten Code erreichen willst:

for(int j = 0; j < anzahl && (j + 1) * 20 <= pf.getImageableHeight() - 10 ; j++) {
  g.drawString(String.valueOf(Ausgabe.get(j)),(int)(pf.getImageableX()+5),pf.getImageableY() + 5 + 20 * j);
}

Noch ein Tutorial zum Drucken in Java: http://java.sun.com/docs/books/tutorial/2d/printing/index.html

Grüße

Daniel