请大家看看下面程序到底错在什么地方?import java.util.*;
import java.awt.*;
import java.awt.event.*;
import java.text.*;import javax.swing.*;public class MimiClock extends JApplet implements Runnable
{
Thread runner=null;

JPanel jPan;
JLabel jwelcome,jOnClock,jAnim,jOffClock,jVer;
Image offScreenImage,imgMimi,imgClock,imgAnim[];
Graphics offScreenG;
Calendar cal=new GregorianCalendar();
int dh,dm,ds,ch,cm,cs;
  int xs,xm,xh,ys,ym,yh;
  int xcenter=149;
  int ycenter=249;
  int timeout=200;
SimpleDateFormat df=new SimpleDateFormat("yyyy MM dd HH:mm:ss");

Control control;

public void init()
{
offScreenImage=createImage(300,450);
offScreenG=offScreenImage.getGraphics();

jPan=new JPanel();

//welcome Label
jwelcome=new JLabel("welcome to useing MimiClock");
jPan.add(jwelcome);
jwelcome.setBackground(Color.green);
jwelcome.setBounds(30,30,30,10);//jwelcome.getSize().width,jwelcome.getSize().height);

//加载图片
imgMimi=getImage(getCodeBase(),"mimi.gif");
imgClock=getImage(getCodeBase(),"clock.gif");
imgAnim=new Image[5];
for(int i=0;i<5;i++) imgAnim[i]=getImage(getCodeBase(),"img"+i+".gif");

//current time
ds=(int)cal.get(Calendar.SECOND);
dm=(int)cal.get(Calendar.MINUTE);
dh=(int)cal.get(Calendar.HOUR_OF_DAY);

//point location
  xs=(int)(Math.cos(ds*3.14f/30-3.14f/2)*30+xcenter);
  xm=(int)(Math.cos(dm*3.14f/30-3.14f/2)*25+xcenter);
  xh=(int)(Math.cos((dh*30+dm/2)*3.14f/180-3.14f/2)*18+xcenter);
  ys=(int)(Math.sin(ds*3.14f/30-3.14f/2)*30+ycenter);
  ym=(int)(Math.cos(dm*3.14f/30-3.14f/2)*25+ycenter);
  yh=(int)(Math.cos((dh*30+dm/2)*3.14f/180-3.14f/2)*18+ycenter);
 
  setLayout(new BorderLayout());
  add(jPan,BorderLayout.WEST);
  setBackground(Color.red);
  add(control=new Control(this),BorderLayout.EAST);
  control.setSize(200,450);
}

public void start()
{
if(runner==null)

runner=new Thread(this);
runner.start();
}
}

public void run()
{
while(runner!=null)
{
try{runner.sleep(timeout);}
catch(InterruptedException e){}
repaint();
}
}

public void update(Graphics g)
{
if(offScreenImage==null) offScreenImage=createImage(300,450);
offScreenG.clipRect(1,1,299,449);
paint(offScreenG);
//g=getGraphics();//??
//g.clipRect(1,1,299,449);//??
g.drawImage(offScreenImage,0,0,this);
}

public void paint(Graphics g)
{
String today;
Date dat=new Date();

cal.setTime(dat);
today=df.format(dat);

//current time
ds=(int)cal.get(Calendar.SECOND);
dm=(int)cal.get(Calendar.MINUTE);
dh=(int)cal.get(Calendar.HOUR_OF_DAY);

//point location
  xs=(int)(Math.cos(ds*3.14f/30-3.14f/2)*30+xcenter);
  xm=(int)(Math.cos(dm*3.14f/30-3.14f/2)*25+xcenter);
  xh=(int)(Math.cos((dh*30+dm/2)*3.14f/180-3.14f/2)*18+xcenter);
  ys=(int)(Math.sin(ds*3.14f/30-3.14f/2)*30+ycenter);
  ym=(int)(Math.cos(dm*3.14f/30-3.14f/2)*25+ycenter);
  yh=(int)(Math.cos((dh*30+dm/2)*3.14f/180-3.14f/2)*18+ycenter);

  //paint point
  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(today,95,400);
 
  g.drawImage(offScreenImage,0,0,this);
 
}

public void stop()
{
runner=null;
}
}class Control extends JPanel implements ItemListener,ActionListener
{
MimiClock mc;
JLabel err;
JTextField h,m,s;
JComboBox jcb;
JButton onButton,offButton;

public Control(MimiClock mcp)
{
mc=mcp;
setLayout(new BorderLayout());

JPanel jcon=new JPanel();
jcon.setLayout(new GridLayout(12,1));
jcon.add(new JLabel());
jcon.add(new JLabel());
jcon.add(new JLabel());

JPanel jcon1=new JPanel();
jcon.setLayout(new FlowLayout(FlowLayout.LEFT));
jcon1.add(new JLabel("set time clock"));
jcon1.add(h=new JTextField());
jcon1.add(new JLabel("hour"));
jcon1.add(m=new JTextField());
jcon1.add(new JLabel("minuts"));
jcon1.add(s=new JTextField());
jcon1.add(new JLabel("second"));
jcon.add(jcon1);

JPanel jcon2=new JPanel();
jcon2.setLayout(new FlowLayout(FlowLayout.LEFT));
jcon2.add(new JLabel("set anim"));
jcb=new JComboBox();
jcb.addItemListener(this);
jcb.addItem("anim1--8:30");
jcb.addItem("anim2--12:00");
jcb.addItem("anim3--17:30");
jcon2.add(jcb);
jcon.add(jcon2);

jcon.add(err=new JLabel("not set Clock"));

jcon.add(new JLabel());

JPanel jcon3=new JPanel();
jcon3.setLayout(new FlowLayout(FlowLayout.CENTER)); 
onButton=new JButton("Set");
onButton.addActionListener(this);
offButton=new JButton("Clear");
offButton.addActionListener(this);
jcon3.add(onButton);
jcon3.add(new JLabel());
jcon3.add(offButton);
jcon.add(jcon3);

jcon.add(new JLabel());
jcon.add(new JLabel());

JPanel jcon4=new JPanel();
jcon.setLayout(new FlowLayout(FlowLayout.CENTER));
jcon4.add(new JLabel("Mimi Clock"));
jcon.add(jcon4);

jcon.add(new JLabel());

add(jcon,BorderLayout.CENTER);//??
}

public void itemStateChanged(ItemEvent e)
{

}

public void actionPerformed(ActionEvent e)
{

}

public void paintComponent(Graphics g)
{
super.paintComponent(g);
g.drawString("aaa",0,60);
}
}

解决方案 »

  1.   

    我根据java 控制台信息改的
    这是init()最后几句getContentPane().setLayout(new BorderLayout()); //setLayout(new BorderLayout());
    getContentPane().add(jPan,BorderLayout.WEST);
    setBackground(Color.red);
    getContentPane().add(control=new Control(this),BorderLayout.EAST);
    control.setSize(200,450);
      

  2.   

    回复人: zebra007(呼呼) 
    还是不可以,用<Applet code=MimiClock.class width=500 height=450></applet>显示时,jwelcome看不见,CONTROL类的任何组件也不可见,必须要鼠标放在组件上,组件才显示。
      

  3.   

    如果Applet运行不正常,可以先作为JFrame运行看是否正常,因为在JFrame中更容易发现错误
    一下贴这么长代码,大部分都不会看的。