/** * File: Ticker.java * Author: Brian Borowski * Date created: May 1999 * Date last modified: January 30, 2011 */ import java.awt.Color; import java.awt.Font; import java.awt.FontMetrics; import java.awt.Graphics; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JComponent; import javax.swing.Timer; public class Ticker extends JComponent { private static final long serialVersionUID = 1L; private int xPos; private final int strWidth, fontHeight, fontDescent; private final String text; private Color textColor, backColor; private final Font font = new Font("SansSerif", Font.PLAIN, 24); private final Timer timer; public Ticker(final String text, final Color textColor, final Color backColor) { this.text = text; this.textColor = textColor; this.backColor = backColor; final FontMetrics fontMetrics = getFontMetrics(font); fontHeight = fontMetrics.getHeight(); fontDescent = fontMetrics.getDescent(); strWidth = fontMetrics.stringWidth(text); xPos = Integer.MAX_VALUE; setDoubleBuffered(true); timer = new Timer(25, new ActionListener() { public void actionPerformed(final ActionEvent ae) { --xPos; repaint(); } }); timer.setInitialDelay(0); } public void setTextColor(final Color textColor) { this.textColor = textColor; } public void setBackgroundColor(final Color backColor) { this.backColor = backColor; } public void start() { timer.restart(); } public void stop() { timer.stop(); } public void paintComponent(Graphics g) { final int canvasWidth = getSize().width, canvasHeight = getSize().height, yPos = (canvasHeight - fontHeight) / 2 + fontHeight - fontDescent; g.setColor(backColor); g.fillRect(0, 0, canvasWidth, canvasHeight); g.setColor(textColor); g.setFont(font); if (xPos > canvasWidth) { xPos = canvasWidth; } if (xPos < 0) { if (xPos <= -strWidth) { xPos = canvasWidth - strWidth; } else { g.drawString(text, canvasWidth + xPos, yPos); } } g.drawString(text, xPos, yPos); } }