Calendar, Date, Locale, TimeZone
Java Source
Applet
Date
Calendar
Timezone
Locale
// Choose timezone and locale. Watch the effect on
// various formats such as currency.
import java.util.*;
import java.awt.*;
import java.awt.event.*;
import java.text.*;
class StringDisplay extends Canvas
{
Image oi = null;
Graphics og;
FontMetrics fm;
Font fnt = new Font("TimesRoman", Font.BOLD, 14);
void drawString (String string, Locale place)
{
oi = createImage(this.getSize().width, this.getSize().height);
og = oi.getGraphics();
og.setFont(fnt);
//fnt = new Font(Font.getFontName(place), Font.BOLD, 14);
fm = getFontMetrics(fnt);
int xstart = (this.getSize().width - fm.stringWidth(string))/2;
int ystart = (this.getSize().height + fm.getHeight())/2;
og.drawString(string, xstart, ystart);
getGraphics().drawImage(oi, 0, 0, this);
}
public void paint (Graphics g)
{
if (oi != null) g.drawImage(oi, 0, 0, this);
}
}
class TimeDisplay extends Frame
{
Image oi = null;
Graphics og;
int w=0, h=0;
boolean showing=false;
FontMetrics fm;
Font fnt = new Font("TimesRoman", Font.BOLD, 26);
void setStatus (boolean v) { showing = v; }
public void showDate(Calendar cal)
{
if (oi == null || (w != this.getSize().width && h != this.getSize().height))
{
oi = createImage(this.getSize().width, this.getSize().height);
og = oi.getGraphics();
og.setFont(fnt);
fm = getFontMetrics(fnt);
}
String date = (cal.get(Calendar.MONTH)+1)+"/"+
cal.get(Calendar.DAY_OF_MONTH)+"/"+
cal.get(Calendar.YEAR)+" "+
cal.get(Calendar.HOUR_OF_DAY)+":"+
cal.get(Calendar.MINUTE)+"."+
cal.get(Calendar.SECOND);
int xstart = (this.getSize().width - fm.stringWidth(date))/2;
int ystart = (this.getSize().height + fm.getHeight())/2;
og.setColor(new Color(255,255,220));
og.fillRect(0, 0, this.getSize().width, this.getSize().height);
og.setColor(Color.red);
og.drawString(date, xstart, ystart);
getGraphics().drawImage(oi, 0, 0, this);
}
public void paint (Graphics g)
{
if (oi != null) g.drawImage(oi, 0, 0, this);
}
}
public class Cal extends java.applet.Applet
implements Runnable, ItemListener
{
StringDisplay country, language, currency, number, percent;
Date date;
TimeDisplay display;
Thread runner;
Calendar calendar = null;
Locale locale[], place = null;
TimeZone timezone = null;
List loc_list, tz_list;
public void init ()
{
setLayout(new BorderLayout());
Panel p = new Panel();
p.setLayout(new GridLayout(1,2,20,0));
Panel q = new Panel();
q.setLayout(new BorderLayout());
Panel r = new Panel();
r.setLayout(new GridLayout(6,1));
r.add (country = new StringDisplay());
r.add (new Label("Country",Label.CENTER));
r.add (language = new StringDisplay());
r.add (new Label("Language",Label.CENTER));
q.add ("North", r);
q.add ("Center", loc_list = new List(14));
q.add ("South", new Label("Locales",Label.CENTER));
p.add (q);
locale = Calendar.getAvailableLocales();
try
{
for (int i=0 ; ; i++) loc_list.add (String.valueOf(locale[i]));
}
catch (ArrayIndexOutOfBoundsException e) { }
q = new Panel();
q.setLayout(new BorderLayout());
r = new Panel();
r.setLayout(new GridLayout(6,1));
r.add (currency = new StringDisplay());
r.add (new Label("Currency",Label.CENTER));
r.add (percent = new StringDisplay());
r.add (new Label("Percent",Label.CENTER));
r.add (number = new StringDisplay());
r.add (new Label("Number", Label.CENTER));
q.add ("North", r);
q.add ("Center", tz_list = new List(5));
q.add ("South", new Label("Timezones",Label.CENTER));
p.add (q);
String tz [] = TimeZone.getAvailableIDs();
try
{
for (int i=0 ; ; i++) tz_list.add (tz[i]);
}
catch (ArrayIndexOutOfBoundsException e) { }
add ("Center", p);
}
public void start ()
{
display = new TimeDisplay();
display.setSize(300,100);
loc_list.addItemListener(this);
tz_list.addItemListener(this);
runner = new Thread(this);
runner.start();
}
public void run ()
{
while (true)
{
try { runner.sleep(1000); } catch (Exception e) { }
if (timezone != null && place != null)
{
calendar = Calendar.getInstance(timezone, place);
if (!display.showing)
{
display.showing = true;
display.show();
}
display.showDate(calendar);
}
}
}
public void stop ()
{
if (display != null) display.dispose();
}
public void itemStateChanged (ItemEvent e)
{
if (e.getSource() == loc_list)
{
place = locale[loc_list.getSelectedIndex()];
country.drawString(place.getDisplayCountry(), place);
language.drawString(place.getDisplayLanguage(), place);
try
{
String cur = NumberFormat.getCurrencyInstance(place).format(100.00);
String num = NumberFormat.getInstance(place).format(100.23);
String per = NumberFormat.getPercentInstance(place).format(0.444);
currency.drawString(cur, place);
number.drawString(num, place);
percent.drawString(per, place);
}
catch (NumberFormatException ex) { System.out.println(ex); }
}
else
if (e.getSource() == tz_list)
{
timezone = TimeZone.getTimeZone(tz_list.getSelectedItem());
}
}
}