错误多多:
显示的是JFrame jfl, paint(g) 方法却是Demo定义的,当然什么都没有了。ja1=new JApplet();
jf1.getContentPane().add(ja1); //你要作什么???td=new Thread(this); // 这样才能使用你定义的Runnable.run()改进:
用ClockBoard类封装clock的运行和绘制。ClockBoard extends JPanel, 减少闪烁。
注意文件名应为:"Clock.java", 因为这里定义了main()
class ClockBoard extends JPanel implements Runnable{
private Date date1;
private int lastxs, lastys, lastxm,
lastym, lastxh, lastyh;
private boolean timeToOut=false;
private Thread td;
public ClockBoard(){
td=new Thread(this);
}
public void start(){
td.start();
}
public void paintComponent(Graphics g)
{
super.paintComponent(g);
int xh, yh, xm, ym, xs, ys;
int xcenter = 80, ycenter = 55;
int h,m,s;
//画圆
g.drawArc(xcenter-50, ycenter-50, 100, 100, 0, 360);
g.drawString("9", xcenter-45, ycenter+3);
g.drawString("3", xcenter+40, ycenter+3);
g.drawString("12", xcenter-5, ycenter-37);
g.drawString("6", xcenter-3, ycenter+45);
date1=new Date();
h=date1.getHours();
m=date1.getMinutes();
s=date1.getSeconds();
//确定针的位置
xs = (int) (Math.cos(s * Math.PI / 30 - Math.PI / 2) * 45 + xcenter);
ys = (int) (Math.sin(s * Math.PI / 30 - Math.PI / 2) * 45 + ycenter);
xm = (int) (Math.cos(m * Math.PI / 30 - Math.PI / 2) * 40 + xcenter);
ym = (int) (Math.sin(m * Math.PI / 30 - Math.PI / 2) * 40 + ycenter);
xh = (int) (Math.cos((h*30 + m / 2) * Math.PI / 180 - Math.PI / 2) * 30
+ xcenter);
yh = (int) (Math.sin((h*30 + m / 2) * Math.PI / 180 - Math.PI / 2) * 30
+ ycenter);
//画针
g.drawLine(xcenter, ycenter, xs, ys);
g.drawLine(xcenter, ycenter-1, xm, ym);
g.drawLine(xcenter-1, ycenter, xm, ym);
g.drawLine(xcenter, ycenter-1, xh, yh);
g.drawLine(xcenter-1, ycenter, xh, yh);
g.drawString(date1.getHours()+":"+date1.getMinutes()+":"+date1.getSeconds(),180,10);
}
public void run()
{
while(!timeToOut)
{
try {
td.sleep(100);
} catch (InterruptedException e) {}
repaint();
}
}
}
class Demo extends JApplet
{
private JFrame jf1;
private JApplet ja1;
private ClockBoard cb=null;
Demo()
{
jf1=new JFrame("CLOCK");
jf1.getContentPane().setLayout(new BorderLayout());
cb=new ClockBoard();
jf1.getContentPane().add(cb,BorderLayout.CENTER);
jf1.addWindowListener(new MyWindow());
jf1.setSize(300,200);
jf1.show();
}
public void go()
{
cb.start();
}
public void update(Graphics g)
{
paint(g);
}
}//class clock ...
//class MyWindow...
显示的是JFrame jfl, paint(g) 方法却是Demo定义的,当然什么都没有了。ja1=new JApplet();
jf1.getContentPane().add(ja1); //你要作什么???td=new Thread(this); // 这样才能使用你定义的Runnable.run()改进:
用ClockBoard类封装clock的运行和绘制。ClockBoard extends JPanel, 减少闪烁。
注意文件名应为:"Clock.java", 因为这里定义了main()
class ClockBoard extends JPanel implements Runnable{
private Date date1;
private int lastxs, lastys, lastxm,
lastym, lastxh, lastyh;
private boolean timeToOut=false;
private Thread td;
public ClockBoard(){
td=new Thread(this);
}
public void start(){
td.start();
}
public void paintComponent(Graphics g)
{
super.paintComponent(g);
int xh, yh, xm, ym, xs, ys;
int xcenter = 80, ycenter = 55;
int h,m,s;
//画圆
g.drawArc(xcenter-50, ycenter-50, 100, 100, 0, 360);
g.drawString("9", xcenter-45, ycenter+3);
g.drawString("3", xcenter+40, ycenter+3);
g.drawString("12", xcenter-5, ycenter-37);
g.drawString("6", xcenter-3, ycenter+45);
date1=new Date();
h=date1.getHours();
m=date1.getMinutes();
s=date1.getSeconds();
//确定针的位置
xs = (int) (Math.cos(s * Math.PI / 30 - Math.PI / 2) * 45 + xcenter);
ys = (int) (Math.sin(s * Math.PI / 30 - Math.PI / 2) * 45 + ycenter);
xm = (int) (Math.cos(m * Math.PI / 30 - Math.PI / 2) * 40 + xcenter);
ym = (int) (Math.sin(m * Math.PI / 30 - Math.PI / 2) * 40 + ycenter);
xh = (int) (Math.cos((h*30 + m / 2) * Math.PI / 180 - Math.PI / 2) * 30
+ xcenter);
yh = (int) (Math.sin((h*30 + m / 2) * Math.PI / 180 - Math.PI / 2) * 30
+ ycenter);
//画针
g.drawLine(xcenter, ycenter, xs, ys);
g.drawLine(xcenter, ycenter-1, xm, ym);
g.drawLine(xcenter-1, ycenter, xm, ym);
g.drawLine(xcenter, ycenter-1, xh, yh);
g.drawLine(xcenter-1, ycenter, xh, yh);
g.drawString(date1.getHours()+":"+date1.getMinutes()+":"+date1.getSeconds(),180,10);
}
public void run()
{
while(!timeToOut)
{
try {
td.sleep(100);
} catch (InterruptedException e) {}
repaint();
}
}
}
class Demo extends JApplet
{
private JFrame jf1;
private JApplet ja1;
private ClockBoard cb=null;
Demo()
{
jf1=new JFrame("CLOCK");
jf1.getContentPane().setLayout(new BorderLayout());
cb=new ClockBoard();
jf1.getContentPane().add(cb,BorderLayout.CENTER);
jf1.addWindowListener(new MyWindow());
jf1.setSize(300,200);
jf1.show();
}
public void go()
{
cb.start();
}
public void update(Graphics g)
{
paint(g);
}
}//class clock ...
//class MyWindow...
Application Mode: java Clock
Applet Mode:
edit a file "Test.html":
<Html>
<applet code=Clock.class width=400 height=400>
</applet>
</html>Appletviewer Test.html
*/
import java.util.*;
import javax.swing.*;
import java.awt.event.*;
import java.applet.*;
import java.awt.*;class ClockBoard extends JPanel implements Runnable{
private Date date1;
private int lastxs, lastys, lastxm,
lastym, lastxh, lastyh;
private boolean timeToOut=false;
private Thread td;
public ClockBoard(){
td=new Thread(this);
}
public void start(){
td.start();
}
public void paintComponent(Graphics g)
{
super.paintComponent(g);
int xh, yh, xm, ym, xs, ys;
int xcenter = 80, ycenter = 55;
int h,m,s;
//画圆
g.drawArc(xcenter-50, ycenter-50, 100, 100, 0, 360);
g.drawString("9", xcenter-45, ycenter+3);
g.drawString("3", xcenter+40, ycenter+3);
g.drawString("12", xcenter-5, ycenter-37);
g.drawString("6", xcenter-3, ycenter+45);
date1=new Date();
h=date1.getHours();
m=date1.getMinutes();
s=date1.getSeconds();
//确定针的位置
xs = (int) (Math.cos(s * Math.PI / 30 - Math.PI / 2) * 45 + xcenter);
ys = (int) (Math.sin(s * Math.PI / 30 - Math.PI / 2) * 45 + ycenter);
xm = (int) (Math.cos(m * Math.PI / 30 - Math.PI / 2) * 40 + xcenter);
ym = (int) (Math.sin(m * Math.PI / 30 - Math.PI / 2) * 40 + ycenter);
xh = (int) (Math.cos((h*30 + m / 2) * Math.PI / 180 - Math.PI / 2) * 30
+ xcenter);
yh = (int) (Math.sin((h*30 + m / 2) * Math.PI / 180 - Math.PI / 2) * 30
+ ycenter);
//画针
g.drawLine(xcenter, ycenter, xs, ys);
g.drawLine(xcenter, ycenter-1, xm, ym);
g.drawLine(xcenter-1, ycenter, xm, ym);
g.drawLine(xcenter, ycenter-1, xh, yh);
g.drawLine(xcenter-1, ycenter, xh, yh);
g.drawString(date1.getHours()+":"+date1.getMinutes()+":"+date1.getSeconds(),180,10);
}
public void run()
{
while(!timeToOut)
{
try {
td.sleep(100);
} catch (InterruptedException e) {}
repaint();
}
}
}
public class Clock extends JApplet
{
private JFrame jf1;
private JApplet ja1;
private ClockBoard cb=null;
public Clock()
{
jf1=new JFrame("CLOCK");
jf1.getContentPane().setLayout(new BorderLayout());
cb=new ClockBoard();
jf1.getContentPane().add(cb,BorderLayout.CENTER);
jf1.addWindowListener(new MyWindow());
jf1.setSize(300,200);
jf1.show();
}
public void init(){
//Clock ck=new Clock();
cb.start(); }
public void go()
{
cb.start();
}
public void update(Graphics g)
{
paint(g);
} public static void main(String args[])
{
Clock ck=new Clock();
ck.go();
}
}
class MyWindow extends WindowAdapter
{
public void windowClosing(WindowEvent e)
{
Frame f=(Frame)(e.getSource());
f.dispose();
}
}
Calendar c=Calendar.getInstance();
c.get(Calendar.SECOND)
class Demo extends JFrame implements Runnable
{
private JFrame jf1;
private JApplet ja1;
private Date date1;
private int lastxs, lastys, lastxm,lastym, lastxh, lastyh;
private boolean timeToOut=false;
Thread td;
Demo()
{
this.setTitle("CLOCK");
addWindowListener(new MyWindow());
setVisible(true);
setSize(200,200);
//jf1.pack();
}
这个就行了,不过效果不太好。画的图也偏了。