// Program: scrollerv.java // Purpose: This program implements a vertical scroller. // Author : Chunyen Liu // Date : 1998/12/21 // Note : All rights reverved by the author import java.awt.Graphics; import java.awt.Font; import java.awt.Color; import java.awt.Image; import java.applet.*; public class scrollerv extends Applet implements Runnable { // general setup Thread t = null; boolean suspended = false; Image oi; Graphics og; int x = 0, y = 0; int width = 0, height = 0; int sw, sh, sd; // input params int nlines, id = 0; String [] message; String font = "Helvetica"; int fontSize = 12; int step = 8, delay = 50; int backR = 0, backG = 255, backB = 0; int foreR = 255, foreG = 255, foreB = 255; public void init() { // get all params nlines = Integer.parseInt(getParameter("nlines")); message = new String[nlines]; for (int i = 0; i < nlines; i++) message[i] = getParameter("message" + (i+1)); font = getParameter("font"); fontSize = Integer.parseInt(getParameter("fontsize")); step = Integer.parseInt(getParameter("step")); delay = Integer.parseInt(getParameter("delay")); backR = Integer.parseInt(getParameter("backgroundr")); backG = Integer.parseInt(getParameter("backgroundg")); backB = Integer.parseInt(getParameter("backgroundb")); foreR = Integer.parseInt(getParameter("foregroundr")); foreG = Integer.parseInt(getParameter("foregroundg")); foreB = Integer.parseInt(getParameter("foregroundb")); // set up applet size and double buffering width = size().width; height = size().height; resize(width, height); oi = createImage(width, height); og = oi.getGraphics(); } public void start() { if (t == null) { t = new Thread(this); t.start(); } } public void stop() { if (t != null && t.isAlive()) t.stop(); t = null; } public void run() { Thread.currentThread().setPriority(Thread.NORM_PRIORITY - 1); while (true) { repaint(); y -= step; if (y < -sh ) { y = height; id = (id + 1 + nlines) % nlines; } try { Thread.sleep(delay); } catch (InterruptedException e) {} } } public void update(Graphics g) { paint(g); } public void paint(Graphics g) { og.setFont(new Font(font, Font.BOLD, fontSize)); og.setColor(new Color(backR, backG, backB)); og.fillRect(0, 0, width - 1, height -1); og.setColor(new Color(foreR, foreG, foreB)); og.drawRect(0, 0, width - 1, height -1); sw = (og.getFontMetrics()).stringWidth(message[id]); sh = (og.getFontMetrics()).getHeight(); sd = (og.getFontMetrics()).getDescent(); x = (width - sw) / 2; og.setColor(Color.black); og.drawString(message[id], x + 1, y + 1); og.setColor(new Color(foreR, foreG, foreB)); og.drawString(message[id], x, y); g.drawImage(oi, 0, 0, this); } // use mouse to toggle animation public boolean mouseDown(java.awt.Event evt, int x, int y) { if (suspended) { t.resume(); } else { t.suspend(); } suspended = !suspended; return true; } }