Crossfire JXClient, Trunk
Clock.java
Go to the documentation of this file.
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.applet.Applet;
43 import java.awt.Color;
44 import java.awt.Font;
45 import java.awt.Graphics;
46 import java.text.SimpleDateFormat;
47 import java.util.Date;
48 import java.util.Locale;
49 
50 
57 @SuppressWarnings("serial")
58 public class Clock extends Applet implements Runnable {
59 
60  private volatile Thread timer; // The thread that displays clock
61  private int lastxs, lastys, lastxm,
62  lastym, lastxh, lastyh; // Dimensions used to draw hands
63  private SimpleDateFormat formatter; // Formats the date displayed
64  private String lastdate; // String to hold date displayed
65  private Font clockFaceFont; // Font for number display on clock
66  private Date currentDate; // Used to get date to display
67  private Color handColor; // Color of main hands and dial
68  private Color numberColor; // Color of second hand and numbers
69  private int xcenter = 80, ycenter = 55; // Center position
70 
71  @Override
72  public void init() {
73  lastxs = lastys = lastxm = lastym = lastxh = lastyh = 0;
74  formatter = new SimpleDateFormat("EEE MMM dd hh:mm:ss yyyy",
75  Locale.getDefault());
76  currentDate = new Date();
77  lastdate = formatter.format(currentDate);
78  clockFaceFont = new Font("Serif", Font.PLAIN, 14);
79  handColor = Color.blue;
80  numberColor = Color.darkGray;
81 
82  try {
83  setBackground(new Color(Integer.parseInt(getParameter("bgcolor"),
84  16)));
85  } catch (NullPointerException e) {
86  } catch (NumberFormatException e) {
87  }
88  try {
89  handColor = new Color(Integer.parseInt(getParameter("fgcolor1"),
90  16));
91  } catch (NullPointerException e) {
92  } catch (NumberFormatException e) {
93  }
94  try {
95  numberColor = new Color(Integer.parseInt(getParameter("fgcolor2"),
96  16));
97  } catch (NullPointerException e) {
98  } catch (NumberFormatException e) {
99  }
100  resize(300, 300); // Set clock window size
101  }
102 
106  @Override
107  public void update(Graphics g) {
108  int xh, yh, xm, ym, xs, ys;
109  int s = 0, m = 10, h = 10;
110  String today;
111 
112  currentDate = new Date();
113 
114  formatter.applyPattern("s");
115  try {
116  s = Integer.parseInt(formatter.format(currentDate));
117  } catch (NumberFormatException n) {
118  s = 0;
119  }
120  formatter.applyPattern("m");
121  try {
122  m = Integer.parseInt(formatter.format(currentDate));
123  } catch (NumberFormatException n) {
124  m = 10;
125  }
126  formatter.applyPattern("h");
127  try {
128  h = Integer.parseInt(formatter.format(currentDate));
129  } catch (NumberFormatException n) {
130  h = 10;
131  }
132 
133  // Set position of the ends of the hands
134  xs = (int) (Math.cos(s * Math.PI / 30 - Math.PI / 2) * 45 + xcenter);
135  ys = (int) (Math.sin(s * Math.PI / 30 - Math.PI / 2) * 45 + ycenter);
136  xm = (int) (Math.cos(m * Math.PI / 30 - Math.PI / 2) * 40 + xcenter);
137  ym = (int) (Math.sin(m * Math.PI / 30 - Math.PI / 2) * 40 + ycenter);
138  xh = (int) (Math.cos((h * 30 + m / 2) * Math.PI / 180 - Math.PI / 2)
139  * 30
140  + xcenter);
141  yh = (int) (Math.sin((h * 30 + m / 2) * Math.PI / 180 - Math.PI / 2)
142  * 30
143  + ycenter);
144 
145  // Get the date to print at the bottom
146  formatter.applyPattern("EEE MMM dd HH:mm:ss yyyy");
147  today = formatter.format(currentDate);
148 
149  g.setFont(clockFaceFont);
150  // Erase if necessary
151  g.setColor(getBackground());
152  if (xs != lastxs || ys != lastys) {
153  g.drawLine(xcenter, ycenter, lastxs, lastys);
154  g.drawString(lastdate, 5, 125);
155  }
156  if (xm != lastxm || ym != lastym) {
157  g.drawLine(xcenter, ycenter - 1, lastxm, lastym);
158  g.drawLine(xcenter - 1, ycenter, lastxm, lastym);
159  }
160  if (xh != lastxh || yh != lastyh) {
161  g.drawLine(xcenter, ycenter - 1, lastxh, lastyh);
162  g.drawLine(xcenter - 1, ycenter, lastxh, lastyh);
163  }
164 
165  // Draw date and hands
166  g.setColor(numberColor);
167  g.drawString(today, 5, 125);
168  g.drawLine(xcenter, ycenter, xs, ys);
169  g.setColor(handColor);
170  g.drawLine(xcenter, ycenter - 1, xm, ym);
171  g.drawLine(xcenter - 1, ycenter, xm, ym);
172  g.drawLine(xcenter, ycenter - 1, xh, yh);
173  g.drawLine(xcenter - 1, ycenter, xh, yh);
174  lastxs = xs;
175  lastys = ys;
176  lastxm = xm;
177  lastym = ym;
178  lastxh = xh;
179  lastyh = yh;
180  lastdate = today;
181  currentDate = null;
182  }
183 
184  @Override
185  public void paint(Graphics g) {
186  g.setFont(clockFaceFont);
187  // Draw the circle and numbers
188  g.setColor(handColor);
189  g.drawArc(xcenter - 50, ycenter - 50, 100, 100, 0, 360);
190  g.setColor(numberColor);
191  g.drawString("9", xcenter - 45, ycenter + 3);
192  g.drawString("3", xcenter + 40, ycenter + 3);
193  g.drawString("12", xcenter - 5, ycenter - 37);
194  g.drawString("6", xcenter - 3, ycenter + 45);
195 
196  // Draw date and hands
197  g.setColor(numberColor);
198  g.drawString(lastdate, 5, 125);
199  g.drawLine(xcenter, ycenter, lastxs, lastys);
200  g.setColor(handColor);
201  g.drawLine(xcenter, ycenter - 1, lastxm, lastym);
202  g.drawLine(xcenter - 1, ycenter, lastxm, lastym);
203  g.drawLine(xcenter, ycenter - 1, lastxh, lastyh);
204  g.drawLine(xcenter - 1, ycenter, lastxh, lastyh);
205  }
206 
207  @Override
208  public void start() {
209  timer = new Thread(this);
210  timer.start();
211  }
212 
213  @Override
214  public void stop() {
215  timer = null;
216  }
217 
218  @Override
219  @SuppressWarnings("SleepWhileHoldingLock")
220  public void run() {
221  Thread me = Thread.currentThread();
222  while (timer == me) {
223  try {
224  Thread.sleep(100);
225  } catch (InterruptedException e) {
226  }
227  repaint();
228  }
229  }
230 
231  @Override
232  public String getAppletInfo() {
233  return "Title: A Clock \n"
234  + "Author: Rachel Gollub, 1995 \n"
235  + "An analog clock.";
236  }
237 
238  @Override
239  public String[][] getParameterInfo() {
240  String[][] info = {
241  { "bgcolor", "hexadecimal RGB number",
242  "The background color. Default is the color of your browser." },
243  { "fgcolor1", "hexadecimal RGB number",
244  "The color of the hands and dial. Default is blue." },
245  { "fgcolor2", "hexadecimal RGB number",
246  "The color of the second hand and numbers. Default is dark gray." }
247  };
248  return info;
249  }
250 }
Clock.lastys
int lastys
Definition: Clock.java:61
Clock.stop
void stop()
Definition: Clock.java:214
Clock.lastym
int lastym
Definition: Clock.java:62
Clock.getAppletInfo
String getAppletInfo()
Definition: Clock.java:232
Clock.init
void init()
Definition: Clock.java:72
Clock.currentDate
Date currentDate
Definition: Clock.java:66
Clock.numberColor
Color numberColor
Definition: Clock.java:68
Clock.handColor
Color handColor
Definition: Clock.java:67
Clock
Definition: Clock.java:58
Clock.getParameterInfo
String[][] getParameterInfo()
Definition: Clock.java:239
Clock.timer
volatile Thread timer
Definition: Clock.java:60
class
About including and JRadioButtonMenuItem Metalworks is optimized to work with the Java look and such as that are specific to the Java look and feel Running then you should either specify the complete path to the java command or update your PATH environment variable as described in the installation instructions for the and many controls are non functional They are intended only to show how to construct the UI for such interfaces Things that do work in the Metalworks demo but also the sizes of many controls Also included with this demo is the PropertiesMetalTheme class
Definition: README.txt:54
Clock.formatter
SimpleDateFormat formatter
Definition: Clock.java:63
Clock.paint
void paint(Graphics g)
Definition: Clock.java:185
Clock.start
void start()
Definition: Clock.java:208
Clock.update
void update(Graphics g)
Definition: Clock.java:107
Clock.lastdate
String lastdate
Definition: Clock.java:64
Clock.clockFaceFont
Font clockFaceFont
Definition: Clock.java:65