Wavescroll


Das ist eine nicht alltägliche Laufschrift, die von unten nach oben scrollt.

Und das ist der ganze Quelltext (auch zum download):

/*
 *
 * Copyright (c) 1996 - 1998
 * Frank Buss (fb@frank-buss.de), Stephan Schloepke (stephan@nordrhein.net)
 *
 * This applet was published in the book:
 *
 *     "Programmier Training Java, In 15 Stunden topfit"
 *     ISBN 3-8158-1303-4
 *     Authors: Frank Buss, Stephan Schloepke
 *     Data Becker Verlage (http://www.databecker.de)
 *
 * You can get this applet and more at http://www.frank-buss.de
 *
 */

//
// Der ultimative WaveScroller mal nach oben
//

import java.applet.*;
import java.awt.*;

public class WaveScrollY extends Applet implements Runnable {

    private Thread Animation;
    private Image Buffer;
    private Graphics gBuffer;
    private char [] laufText;
    private int textHoehe;
    private int textPos;
    private int pixelPos;
    private double sin=0.0;
    private double sinOff;
    private int xZentrum;
    private int sinAmp;
    private double zeichenOff;
    private int textBreite;
    private int stauchung;
    private int geschwindigkeit;

    public void start() {
        if (Animation == null) {
            Animation = new Thread (this);
            Animation.start();
        }
    }
    public void stop() {
        if (Animation != null) {
            Animation.stop();
            Animation = null;
        }
    }
    public void run() {
        while (true) {
            try {
                Animation.sleep (25);
            } catch (Exception e) { }
            repaint();
        }
    }
    public void update(Graphics g) {
        paint(g);
    }
    public void paint(Graphics g) {
        g.drawImage (Buffer,0,0, this);
        zeichneLaufschrift();
    }

    private String getStringParam(String name, String standardWert) {
        String param=getParameter(name);
        if (param==null) return standardWert;
        return param;
    }
    private int getIntParam(String name, int standardWert) {
        String param=getParameter(name);
        if (param==null) return standardWert;
        return (Integer.parseInt(param,10));
    }
    
    public void init() {
        setBackground(Color.black);
        setForeground(Color.red);
        String text=getStringParam("Text","KEIN TEXT IN DER HTML SEITE !!!    ");
        String fontName=getStringParam("Zeichensatz","Courier");
        int fontGroesse=getIntParam("ZeichenGroesse",20);
        sinOff=getIntParam("SinusOffset",2) * Math.PI / 180;
        zeichenOff=getIntParam("ZeichenOffset",10) * Math.PI / 180;
        stauchung=getIntParam("Stauchung",0);
        geschwindigkeit=getIntParam("Geschwindigkeit",2);
        Buffer=createImage(size().width,size().height);
        gBuffer=Buffer.getGraphics();
        gBuffer.setFont(new Font(fontName,Font.PLAIN,fontGroesse));
        textHoehe=gBuffer.getFontMetrics().getHeight();
        textBreite=gBuffer.getFontMetrics().getMaxAdvance();
        sinAmp=(size().width-textBreite)>>1;
        xZentrum=size().width>>1;
        for (int c=0;c<=size().height/(textHoehe-stauchung);c++) text=" "+text;
        laufText=new char[text.length()];
        text.getChars(0,text.length(),laufText,0);
    }

    private void zeichneLaufschrift() {
        gBuffer.setColor(getBackground());
        gBuffer.fillRect(0,0,size().width,size().height);
        gBuffer.setColor(getForeground());
        pixelPos-=geschwindigkeit;
        if (pixelPos<0) {
            textPos++;
            if (textPos>=laufText.length) textPos=0;
            pixelPos=textHoehe-stauchung;
        }
        int tPos=textPos;
        for (int yPos=pixelPos;yPos<=size().height+textHoehe;yPos+=textHoehe-stauchung) {
            if (tPos==laufText.length) tPos=0;
            int xPos = xZentrum + (int) (sinAmp * Math.sin (sin+tPos*zeichenOff));
            xPos-=gBuffer.getFontMetrics().charWidth(laufText[tPos])>>1;
            gBuffer.drawChars(laufText,tPos,1,xPos,yPos);
            tPos++;
        }
        sin += sinOff;
    }
}


11. November 1999, Frank Buß