KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > TickerArea


1 /*
2  * @(#)TickerArea.java 1.14 06/02/22
3  *
4  * Copyright (c) 2006 Sun Microsystems, Inc. All Rights Reserved.
5  *
6  * Redistribution and use in source and binary forms, with or without
7  * modification, are permitted provided that the following conditions are met:
8  *
9  * -Redistribution of source code must retain the above copyright notice, this
10  * list of conditions and the following disclaimer.
11  *
12  * -Redistribution in binary form must reproduce the above copyright notice,
13  * this list of conditions and the following disclaimer in the documentation
14  * and/or other materials provided with the distribution.
15  *
16  * Neither the name of Sun Microsystems, Inc. or the names of contributors may
17  * be used to endorse or promote products derived from this software without
18  * specific prior written permission.
19  *
20  * This software is provided "AS IS," without a warranty of any kind. ALL
21  * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, INCLUDING
22  * ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
23  * OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN MICROSYSTEMS, INC. ("SUN")
24  * AND ITS LICENSORS SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE
25  * AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS
26  * DERIVATIVES. IN NO EVENT WILL SUN OR ITS LICENSORS BE LIABLE FOR ANY LOST
27  * REVENUE, PROFIT OR DATA, OR FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL,
28  * INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY
29  * OF LIABILITY, ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE,
30  * EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
31  *
32  * You acknowledge that this software is not designed, licensed or intended
33  * for use in the design, construction, operation or maintenance of any
34  * nuclear facility.
35  */

36
37 /*
38  * @(#)TickerArea.java 1.14 06/02/22
39  */

40
41 import java.awt.Graphics JavaDoc;
42 import java.awt.Color JavaDoc;
43 import java.awt.Font JavaDoc;
44 import java.awt.FontMetrics JavaDoc;
45 import java.util.StringTokenizer JavaDoc;
46
47 /**
48  * This ImageArea renders a string of text that constantly scrolls across
49  * the indicated area of the ImageMap in the specified color.
50  *
51  * @author Jim Graham
52  * @version 1.14, 02/22/06
53  */

54 class TickerArea extends ImageMapArea {
55
56     String JavaDoc tickertext;
57     Color JavaDoc tickercolor;
58     Font JavaDoc tickerfont;
59     int speed; // In pixels per second for scrolling
60

61     int tickerx;
62     int tickery;
63     int tickerlen;
64     long lasttick;
65
66     public void handleArg(String JavaDoc s) {
67     StringTokenizer JavaDoc st = new StringTokenizer JavaDoc(s, ",");
68
69     tickertext = st.nextToken();
70     tickercolor = Color.black;
71     speed = 100;
72     String JavaDoc fontname = "Serif";
73
74     if (st.hasMoreTokens()) {
75         fontname = st.nextToken();
76         if (st.hasMoreTokens()) {
77         String JavaDoc str = st.nextToken();
78         if (str.startsWith("#")) {
79             str = str.substring(1);
80         }
81         try {
82             int colorval = Integer.parseInt(str, 16);
83             tickercolor = new Color JavaDoc((colorval >> 16) & 0xff,
84                         (colorval >> 8) & 0xff,
85                         (colorval >> 0) & 0xff);
86         } catch (Exception JavaDoc e) {
87             tickercolor = Color.black;
88         }
89         if (st.hasMoreTokens()) {
90             str = st.nextToken();
91             try {
92             speed = Integer.parseInt(str);
93             } catch (Exception JavaDoc e) {
94             speed = 100;
95             }
96         }
97         }
98     }
99
100     FontMetrics JavaDoc fm;
101     int size;
102     int nextsize = H;
103     do {
104         size = nextsize;
105         tickerfont = new Font JavaDoc(fontname, Font.PLAIN, size);
106         fm = parent.getFontMetrics(tickerfont);
107         nextsize = (size * 9) / 10;
108     } while (fm.getHeight() > H && size > 0);
109     tickerlen = fm.stringWidth(tickertext);
110     tickery = fm.getAscent();
111     }
112
113     public void getMedia() {
114     tickerx = 0;
115     repaint();
116     lasttick = System.currentTimeMillis();
117     }
118
119     public boolean animate() {
120     long curtick = System.currentTimeMillis();
121     tickerx -= ((speed * (curtick - lasttick)) / 1000);
122     if (tickerx > W || tickerx + tickerlen < 0) {
123         tickerx = W;
124     }
125     repaint();
126     lasttick = curtick;
127     return true;
128     }
129
130     public void highlight(Graphics JavaDoc g) {
131     g.setColor(tickercolor);
132     g.setFont(tickerfont);
133     g.drawString(tickertext, X+tickerx, Y+tickery);
134     }
135 }
136
137
Popular Tags