mycanvas[]初始化,请在init()方法中,并在
for(int i=1;i<=20;i++)
{
mycanvas[i]=new Mycanvas(i,i);
p1.add(mycanvas[i]);
}
之前,加上mycanvas = new Mycanvas[20] ;
for(int i=1;i<=20;i++)
{
mycanvas[i]=new Mycanvas(i,i);
p1.add(mycanvas[i]);
}
之前,加上mycanvas = new Mycanvas[20] ;
Java中,数组也是一个对象,需要new 来创建~
呵呵~~
for(int i=1;i<=20;i++)
{
mycanvas[i]=new Mycanvas(i,i);
p1.add(mycanvas[i]);
}
之前,加上mycanvas = new Mycanvas[20] ;但程序仍然有误
我花了好久调试了一下。
你犯了一个低级错误,请在p1=new Panel();
之后加上p2=new Panel ();即可。
原来你的p1用了CardLayout所以在添加组件时要用add(component,String)
其中component是你要的组件,string是提供给CardLayout用来显示组件的名字如card.show(component,string)
主要代码为
Mycanvas mycanvas[]=new Mycanvas[20];
Panel p2=new Panel();
for(int i=0;i<20;i++) //原来i=1; i<=20;java数组以0开始。
{
mycanvas[i]=new Mycanvas(i,i);
p1.add(mycanvas[i],"comp"+i);//这是最主要的变化。
}完整代码
import java.awt.*;
import java.applet.*;
import java.awt.event.*;class Mycanvas extends Canvas
{
int x,y; Mycanvas(int a,int b)
{
x=a;y=b;
getSize();
}
public Dimension getPreferedSize()
{
return new Dimension(200,100);
}
public void paint(Graphics g)
{
g.setColor(Color.red);
g.fillOval(50,50,4*x,4*y);
g.drawString("我是第 "+x,20,90);
}
}
public class Mycode1 extends Applet implements ActionListener
{
CardLayout mycard;
Button button1,button2,button3;
Mycanvas mycanvas[]=new Mycanvas[20];
Panel p1,p2;
public void init()
{
setLayout(new BorderLayout());//Applet的布局
mycard=new CardLayout();
p1=new Panel();
p2=new Panel(); p1.setLayout(mycard);
button1=new Button("first");
button2=new Button("next");
button3=new Button("last");
for(int i=0;i<20;i++)
{
mycanvas[i]=new Mycanvas(i,i);
p1.add(mycanvas[i],"com"+i);
}
button1.addActionListener(this);
button2.addActionListener(this);
button3.addActionListener(this);
p2.add(button1);
p2.add(button2);
p2.add(button3);
add(p1,BorderLayout.CENTER);
add(p2,BorderLayout.NORTH); }
public void actionPerformed(ActionEvent e)
{
if(e.getSource()==button1)
{
mycard.first(p1);
}
if(e.getSource()==button2)
{
mycard.next(p1);
}
if(e.getSource()==button3)
{
mycard.last(p1);
}
}
}
尤其是jgo(航海家),大家都有分!!