初学很多东西还没弄明白!赐教 谢谢!
/**
* @(#)TimerTest.java
*
*
* @author
* @version 1.00 2011/6/1
*/
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.*;
public class TimerTest{
public static void main(String[] args)
{JFrame f = new TimerTestFrame();
f.show();
}
}class TimerTestFrame extends JFrame
{
public TimerTestFrame()
{
setSize(550, 400);
setTitle("TimerTest");
addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
}); Container c = getContentPane();
c.setLayout(new GridLayout(2, 3));
c.setBackground(Color.red);
c.setForeground(Color.green);
c.add(new ClockCanvas("San Jose", "GMT-8"));
c.add(new ClockCanvas("Taipei", "GMT+8"));
c.add(new ClockCanvas("Berlin", "GMT+1"));
c.add(new ClockCanvas("New York", "GMT-5"));
c.add(new ClockCanvas("Cairo", "GMT+2"));
c.add(new ClockCanvas("Bombay", "GMT+5"));
}
}
interface TimerListener{
void timeElapsed(Timer t);
class Timer extends Thread{
private TimerListener target;
private int interval;
public Timer(int i, TimerListener t){
target = t;
interval = i;
setDaemon(true);
}
public void run(){
try
{
while (!interrupted())
{
sleep(interval);
target.timeElapsed(this);
}
}
catch(InterruptedException e) {}
}
}
}
class ClockCanvas extends JPanel implements TimerListener{
private int seconds=0 ;
private String city;
private int offset;
private int hour;
private int minutes;
private final int LOCAL = 16;
// private GregorianCalendar calendar;
Calendar calendar=Calendar.getInstance(); public ClockCanvas(String c, String tz)
{
city = c;
calendar = new GregorianCalendar(TimeZone.getTimeZone(tz));
Timer t = new Timer(1000, this);
t.start();
setSize(125, 125);
}
public void paintComponent(Graphics g){ super.paintComponent(g);
Graphics2D gg=(Graphics2D)g;
gg.setStroke(new BasicStroke(2.0f));
gg.drawOval(0, 0, 100, 100);
double hourAngle = 2 * Math.PI
* (seconds - 3 * 60 * 60) / (12 * 60 * 60);
double minuteAngle = 2 * Math.PI
* (seconds - 15 * 60) / (60 * 60);
double secondAngle = 2 * Math.PI
* (seconds - 15) / 60;
g.drawLine(50, 50, 50 + (int)(30
* Math.cos(hourAngle)),
50 + (int)(30 * Math.sin(hourAngle)));
g.setColor(Color.blue);
g.drawLine(50, 50, 50 + (int)(40 * Math.cos(minuteAngle)),
50 + (int)(40 * Math.sin(minuteAngle)));
g.setColor(Color.red);
g.drawLine(50, 50, 50 + (int)(45 * Math.cos(secondAngle)),
50 + (int)(45 * Math.sin(secondAngle))); seconds = calendar.get(Calendar.SECOND);
hour=calendar.get(Calendar.HOUR);
minutes=calendar.get(Calendar.MINUTE);
gg.drawString(city+":现在时刻 "+hour+":"+minutes+":"+seconds, 0, 110);
/* public void drawnum(Graphics g){
/* for(int 1=1;i<=12;i++){
/* g.drawString(""+i,45+(int)(Math.cos(i*Math.PI/6)),45+(int)Math.sin(i*Math.PI/6)));
*}
*} 此处是为了在时钟上标示出数字,帮忙解决下这个问题!最好怎么实现?直接访问paintComponent的参数g不行这是为什么? **/
}
public void timeElapsed(Timer t)
{
calendar.setTime(new Date());//此处无法访问Date()
seconds = calendar.get(Calendar.HOUR) * 60 * 60
+ calendar.get(Calendar.MINUTE) * 60
+ calendar.get(Calendar.SECOND);
repaint();
}
}
/**
* @(#)TimerTest.java
*
*
* @author
* @version 1.00 2011/6/1
*/
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.*;
public class TimerTest{
public static void main(String[] args)
{JFrame f = new TimerTestFrame();
f.show();
}
}class TimerTestFrame extends JFrame
{
public TimerTestFrame()
{
setSize(550, 400);
setTitle("TimerTest");
addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
}); Container c = getContentPane();
c.setLayout(new GridLayout(2, 3));
c.setBackground(Color.red);
c.setForeground(Color.green);
c.add(new ClockCanvas("San Jose", "GMT-8"));
c.add(new ClockCanvas("Taipei", "GMT+8"));
c.add(new ClockCanvas("Berlin", "GMT+1"));
c.add(new ClockCanvas("New York", "GMT-5"));
c.add(new ClockCanvas("Cairo", "GMT+2"));
c.add(new ClockCanvas("Bombay", "GMT+5"));
}
}
interface TimerListener{
void timeElapsed(Timer t);
class Timer extends Thread{
private TimerListener target;
private int interval;
public Timer(int i, TimerListener t){
target = t;
interval = i;
setDaemon(true);
}
public void run(){
try
{
while (!interrupted())
{
sleep(interval);
target.timeElapsed(this);
}
}
catch(InterruptedException e) {}
}
}
}
class ClockCanvas extends JPanel implements TimerListener{
private int seconds=0 ;
private String city;
private int offset;
private int hour;
private int minutes;
private final int LOCAL = 16;
// private GregorianCalendar calendar;
Calendar calendar=Calendar.getInstance(); public ClockCanvas(String c, String tz)
{
city = c;
calendar = new GregorianCalendar(TimeZone.getTimeZone(tz));
Timer t = new Timer(1000, this);
t.start();
setSize(125, 125);
}
public void paintComponent(Graphics g){ super.paintComponent(g);
Graphics2D gg=(Graphics2D)g;
gg.setStroke(new BasicStroke(2.0f));
gg.drawOval(0, 0, 100, 100);
double hourAngle = 2 * Math.PI
* (seconds - 3 * 60 * 60) / (12 * 60 * 60);
double minuteAngle = 2 * Math.PI
* (seconds - 15 * 60) / (60 * 60);
double secondAngle = 2 * Math.PI
* (seconds - 15) / 60;
g.drawLine(50, 50, 50 + (int)(30
* Math.cos(hourAngle)),
50 + (int)(30 * Math.sin(hourAngle)));
g.setColor(Color.blue);
g.drawLine(50, 50, 50 + (int)(40 * Math.cos(minuteAngle)),
50 + (int)(40 * Math.sin(minuteAngle)));
g.setColor(Color.red);
g.drawLine(50, 50, 50 + (int)(45 * Math.cos(secondAngle)),
50 + (int)(45 * Math.sin(secondAngle))); seconds = calendar.get(Calendar.SECOND);
hour=calendar.get(Calendar.HOUR);
minutes=calendar.get(Calendar.MINUTE);
gg.drawString(city+":现在时刻 "+hour+":"+minutes+":"+seconds, 0, 110);
/* public void drawnum(Graphics g){
/* for(int 1=1;i<=12;i++){
/* g.drawString(""+i,45+(int)(Math.cos(i*Math.PI/6)),45+(int)Math.sin(i*Math.PI/6)));
*}
*} 此处是为了在时钟上标示出数字,帮忙解决下这个问题!最好怎么实现?直接访问paintComponent的参数g不行这是为什么? **/
}
public void timeElapsed(Timer t)
{
calendar.setTime(new Date());//此处无法访问Date()
seconds = calendar.get(Calendar.HOUR) * 60 * 60
+ calendar.get(Calendar.MINUTE) * 60
+ calendar.get(Calendar.SECOND);
repaint();
}
}
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货