Die Laufschrift, die in diesem Abschnitt beschrieben wird, bewegt sich von rechts nach links,
vertikal zentriert, über den Bildschirm.
Hier zuerst einmal das zugehörige Listing, im Anschluss erklären
wir die Vorgehensweise:
public class ScrollTextDemo1
extends Applet implements Runnable {
final int STEP = 5; // Schrittweite
// Text der Laufschrift
final String TEXT = "a little graphic demo in Java";
final int DELAY = 100; // Verzögerung in Millisekunden
int x, y; // aktuelle Position der Schrift
int textwidth; // Schriftbreite
Thread t; // Thread zur Steuerung der Laufschrift
public void init() {
// Setzen des Fonts
setFont(new Font("SansSerif", Font.PLAIN, 30));
FontMetrics fm = getFontMetrics(getFont());
// Initialisierung der Startposition der Schrift
y = (int)(getSize().height -
fm.getHeight()) / 2 + fm.getAscent();
x = getSize().width;
// Schriftbreite ermitteln
textwidth = fm.stringWidth(TEXT);
setBackground(Color.white);
}
public void paint(Graphics g) {
g.drawString(TEXT, x, y); // Zeichnen der Schrift
}
public void start() {
if (t == null) { // Wenn kein Thread angelegt ist
t = new Thread(this); // Anlegen und Starten des Threads
t.start();
}
}
public void stop() {
t = null; // dereferenzieren
}
public void run() {
Thread me = Thread.currentThread();
while(me == t) {
if (x < -textwidth) // Text am Ende des Applets?
x = getSize().width; // wieder zum Anfang
else // sonst
x = x - STEP; // um 'STEP' versetzen
repaint(); // Text neu zeichnen
try {
t.sleep(DELAY); // Verzögerung
}
catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
In init() wird die Hintergrundfarbe auf Weiß gesetzt
und der Font eingestellt.
Der Text wird genauso wie im vorigen Abschnitt horizontal bzw. vertikal zentriert:
y = (int)(getSize().height -
fm.getHeight()) / 2 + fm.getAscent();
x und y repräsentieren die aktuelle Postition des Texts
innerhalb des
Applets. y bleibt konstant, und x verändert sich ständig,
um den Text horizontal zu scrollen. Initialisiert wird x mit der Breite des
Applets, da der Text von rechts nach links laufen und anfangs nicht
sichtbar sein soll.