Laufschriften


Mit diesem Applet lassen sich unterschiedliche Laufschriften erzeugen. Wenn nur der Parameter 'Text' für den Laufschrifttext angegeben wird, dann sieht das so aus:


Man kann allerdings auch noch andere Parameter einstellen, um z.B. so ein Ergebnis zu erzeugen:


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
 *
 */

//
// Ein Laufschrift-Applet
//

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

public class Laufschrift 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=1 * Math.PI / 180;

    private int yZentrum;
    private int sinAmp;
    private double zeichenOff;
    private int textBreite;

    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 (10);
            } 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.white);
        String text=getStringParam("Text","KEIN TEXT IN DER HTML SEITE !!!    ");
        String fontName=getStringParam("Zeichensatz","Courier");
        int fontGroesse=getIntParam("ZeichenGroesse",12);
        sinOff=getIntParam("SinusOffset",2) * Math.PI / 180;
        zeichenOff=getIntParam("ZeichenOffset",15) * Math.PI / 180;
        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().height-textHoehe)/2;
        yZentrum=(size().height+textHoehe)>>1;
        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--;
        if (pixelPos<0) {
            textPos++;
            if (textPos>=laufText.length) textPos=0;
            pixelPos=textBreite;
        }
        int tPos=textPos;
        for (int pixPos=pixelPos;pixPos<=size().width+textBreite;pixPos+=textBreite) {
            if (tPos==laufText.length) tPos=0;
            int yPos = yZentrum + (int) (sinAmp * Math.sin (sin+tPos*zeichenOff));
            int xPos=pixPos-(gBuffer.getFontMetrics().charWidth(laufText[tPos])>>1);
            gBuffer.drawChars(laufText,tPos,1,xPos,yPos);
            tPos++;
        }
        sin += sinOff;
    }
}


11. November 1999, Frank Buß