Niko: Java Applet: drawString()

Hallo,

ich versuche gerade, mich in Java einzuarbeiten und probiere gerade, ein paar Applets zu schreiben.

Ich würde gerne wissen, ob es eine Möglichkeit gibt, einen mit Text im Applet-Fenster zu überschreiben.

Im Moment mache ich folgendes:

for (i=1;i<=100;i++) {
   System.out.println(i);
}

Das gibt mir auf meiner Konsole auch schön die Zahlen aus.

Ich würde aber gerne dieses "Hochzählen" im Applet-Fenster ausgeben:

for (i=1;i<=100;i++) {
   g.drawString(i, 40, 80);
}

Das "übermalt" natürlich die vorher geschriebenen Zahlen, so dass nichts mehr zu erkennen ist.

Meine Frage nun: Wie kann ich die vorherige Ausgabe löschen? Ich könnte natürlich ein Rechteck in der Hintergrundfarbe darübermalen und dann den neuen Text schreiben, aber das erscheint mir nicht sonderlich elegant. Gibt es nicht etwas wie "replaceString" oder so?

Ich könnte auch ein Textfeld anlegen und mit setText() jeweils den Inhalt überschreiben. Aber das sieht nicht aus wie eine Applikation. Ein Eingabeelement dafür zu nehmen, ist eben auch nicht so wirklich elegant.

Hat jemand einen Tipp für mich?

Liebe Grüße
Niko

  1. Hallo,

    Das "übermalt" natürlich die vorher geschriebenen Zahlen, so dass nichts mehr zu erkennen ist.

    Meine Frage nun: Wie kann ich die vorherige Ausgabe löschen? Ich könnte natürlich ein Rechteck in der Hintergrundfarbe darübermalen und dann den neuen Text schreiben, aber das erscheint mir nicht sonderlich elegant. Gibt es nicht etwas wie "replaceString" oder so?

    Nein, denn mit drawString() malst du in einen Grafik-Speicher. Ein Grafikspeicher
    kennt keine Strings oder dergleichen, sondern nur Pixel. Möchtest du nun bspw.
    die schwarzen Pixel (Text) entfernen, mußt du dem jeweiligen Pixel eine andere
    Farbe geben, z.B. die Hintergrundfarbe. Dies würde man z.B. durch das Zeichnen
    eines Rechtecks machen, wie du ja schon geschrieben hast.

    Ich könnte auch ein Textfeld anlegen und mit setText() jeweils den Inhalt überschreiben. Aber das sieht nicht aus wie eine Applikation. Ein Eingabeelement dafür zu nehmen, ist eben auch nicht so wirklich elegant.

    Ja, oder statt eines Textfelds ein Label verwenden, das genau für Textdarstellung
    vorgesehen ist. Beachte aber, dass du dann ggf. nicht mehr so ohne weiteres
    in einer Schleife den Text ändern kannst, wenn du ihn auch sehen möchtest.

    Gruß
    Slyh

    1. Hallo Slyh,

      Ja, oder statt eines Textfelds ein Label verwenden, das genau für Textdarstellung
      vorgesehen ist. Beachte aber, dass du dann ggf. nicht mehr so ohne weiteres
      in einer Schleife den Text ändern kannst, wenn du ihn auch sehen möchtest.

      Ah, danke. OK. Das hatte ich wohl in der Dokumentation falsch verstanden.

      Wieso kann man den Text nicht so leicht in einer Schleife ändern? Ich habe es gerade probiert. Meinst du das Problem mit der Größe? So dass ein Label mit String XXXX nicht zum Beispiel den Wert MMMMMMMMM annehmen kann, ohne dass es abgeschnitten wird?

      Gibt es einen Workarround dafür?