Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/openjdk-multiarch-jdk8u
Path: blob/aarch64-shenandoah-jdk8u272-b10/jdk/src/share/demo/applets/NervousText/NervousText.java
38829 views
1
/*
2
* Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved.
3
*
4
* Redistribution and use in source and binary forms, with or without
5
* modification, are permitted provided that the following conditions
6
* are met:
7
*
8
* - Redistributions of source code must retain the above copyright
9
* notice, this list of conditions and the following disclaimer.
10
*
11
* - Redistributions in binary form must reproduce the above copyright
12
* notice, this list of conditions and the following disclaimer in the
13
* documentation and/or other materials provided with the distribution.
14
*
15
* - Neither the name of Oracle nor the names of its
16
* contributors may be used to endorse or promote products derived
17
* from this software without specific prior written permission.
18
*
19
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
20
* IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
21
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
22
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
23
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
24
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
25
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
26
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
27
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
28
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
29
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30
*/
31
32
/*
33
* This source code is provided to illustrate the usage of a given feature
34
* or technique and has been deliberately simplified. Additional steps
35
* required for a production-quality application, such as security checks,
36
* input validation and proper error handling, might not be present in
37
* this sample code.
38
*/
39
40
41
42
import java.awt.Graphics;
43
import java.awt.Font;
44
import java.applet.Applet;
45
import java.awt.event.MouseEvent;
46
import java.awt.event.MouseListener;
47
48
49
/**
50
* An applet that displays jittering text on the screen.
51
*
52
* @author Daniel Wyszynski 04/12/95
53
* @author 05/09/95 kwalrath Changed string; added thread suspension
54
* @author 02/06/98 madbot removed use of suspend and resume and cleaned up
55
*/
56
@SuppressWarnings("serial")
57
public class NervousText extends Applet implements Runnable, MouseListener {
58
59
String banner; // The text to be displayed
60
char bannerChars[]; // The same text as an array of characters
61
char attributes[]; // Character attributes ('^' for superscript)
62
Thread runner = null; // The thread that is displaying the text
63
boolean threadSuspended; // True when thread suspended (via mouse click)
64
static final int REGULAR_WD = 15;
65
static final int REGULAR_HT = 36;
66
static final int SMALL_WD = 12;
67
static final int SMALL_HT = 24;
68
Font regularFont = new Font("Serif", Font.BOLD, REGULAR_HT);
69
Font smallFont = new Font("Serif", Font.BOLD, SMALL_HT);
70
71
@Override
72
public void init() {
73
banner = getParameter("text");
74
if (banner == null) {
75
banner = "HotJava";
76
}
77
78
int bannerLength = banner.length();
79
StringBuilder bc = new StringBuilder(bannerLength);
80
StringBuilder attrs = new StringBuilder(bannerLength);
81
int wd = 0;
82
for (int i = 0; i < bannerLength; i++) {
83
char c = banner.charAt(i);
84
char a = 0;
85
if (c == '^') {
86
i++;
87
if (i < bannerLength) {
88
c = banner.charAt(i);
89
a = '^';
90
wd += SMALL_WD - REGULAR_WD;
91
} else {
92
break;
93
}
94
}
95
bc.append(c);
96
attrs.append(a);
97
wd += REGULAR_WD;
98
}
99
100
bannerLength = bc.length();
101
bannerChars = new char[bannerLength];
102
attributes = new char[bannerLength];
103
bc.getChars(0, bannerLength, bannerChars, 0);
104
attrs.getChars(0, bannerLength, attributes, 0);
105
106
threadSuspended = false;
107
resize(wd + 10, 50);
108
addMouseListener(this);
109
}
110
111
@Override
112
public void destroy() {
113
removeMouseListener(this);
114
}
115
116
@Override
117
public void start() {
118
runner = new Thread(this);
119
runner.start();
120
}
121
122
@Override
123
public synchronized void stop() {
124
runner = null;
125
if (threadSuspended) {
126
threadSuspended = false;
127
notify();
128
}
129
}
130
131
@Override
132
public void run() {
133
Thread me = Thread.currentThread();
134
while (runner == me) {
135
try {
136
Thread.sleep(100);
137
synchronized (this) {
138
while (threadSuspended) {
139
wait();
140
}
141
}
142
} catch (InterruptedException e) {
143
}
144
repaint();
145
}
146
}
147
148
@Override
149
public void paint(Graphics g) {
150
int length = bannerChars.length;
151
for (int i = 0, x = 0; i < length; i++) {
152
int wd, ht;
153
if (attributes[i] == '^') {
154
wd = SMALL_WD;
155
ht = SMALL_HT;
156
g.setFont(smallFont);
157
} else {
158
wd = REGULAR_WD;
159
ht = REGULAR_HT;
160
g.setFont(regularFont);
161
}
162
int px = (int) (10 * Math.random() + x);
163
int py = (int) (10 * Math.random() + ht);
164
g.drawChars(bannerChars, i, 1, px, py);
165
x += wd;
166
}
167
}
168
169
@Override
170
public synchronized void mousePressed(MouseEvent e) {
171
e.consume();
172
threadSuspended = !threadSuspended;
173
if (!threadSuspended) {
174
notify();
175
}
176
}
177
178
@Override
179
public void mouseReleased(MouseEvent e) {
180
}
181
182
@Override
183
public void mouseEntered(MouseEvent e) {
184
}
185
186
@Override
187
public void mouseExited(MouseEvent e) {
188
}
189
190
@Override
191
public void mouseClicked(MouseEvent e) {
192
}
193
194
@Override
195
public String getAppletInfo() {
196
return "Title: NervousText\nAuthor: Daniel Wyszynski\n"
197
+ "Displays a text banner that jitters.";
198
}
199
200
@Override
201
public String[][] getParameterInfo() {
202
String pinfo[][] = {
203
{ "text", "string", "Text to display" }, };
204
return pinfo;
205
}
206
}
207
208