我把两个canvas添加到frame,然后向通过按钮点击来实现切换canvas,但发现的结果却是只能显示最后加进去的canvas,为了方便大家,我把我的程序贴在下面,请大虾们帮忙!package mutiple.canvas;import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Canvas;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;public class SaveCanvas extends Frame {
ImageCanvas ic = new ImageCanvas();
ImageCanvas2 ic2 = new ImageCanvas2();

boolean flag = false; public SaveCanvas() {
Button b = new Button("save   canvas");
b.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
if(flag){
ic.setVisible(true);
ic2.setVisible(false);
}else{
ic.setVisible(false);
ic2.setVisible(true);
}
flag = !flag;
}
});
setLayout(new BorderLayout());
add(b, BorderLayout.NORTH); add(ic, BorderLayout.CENTER);
add(ic2, BorderLayout.CENTER);
setSize(new Dimension(400, 400));
setVisible(true);
ic.setVisible(false);
ic2.setVisible(false);
} public static void main(String args[]) {
new SaveCanvas();
} class ImageCanvas extends Canvas {
public void paint(Graphics g) {
g.setColor(Color.blue);
g.fillRect(0, 0, this.getWidth(), this.getHeight());
g.setColor(Color.red);
g.drawLine(0, 0, this.getWidth(), this.getHeight());
}
} class ImageCanvas2 extends Canvas {
public void paint(Graphics g) {
g.setColor(Color.blue);
g.fillRect(0, 0, this.getWidth(), this.getHeight());
g.setColor(Color.red);
g.drawLine(0, this.getHeight(), this.getWidth(), 0);
}
}
}

解决方案 »

  1.   

    只支持加一个Canvas,前面的都会被最后一个覆盖。。
      

  2.   

    你只要改变画的东西就可以达到你要的切换效果啦,
    一般不需要一个以上的Canvas来操作
      

  3.   

    上面的程序只是我用于测试的例子,而我真正就是要实现两个canvas的切换,因为两个canvas都各自画着不同的东西,当要到达切换的临界点时,只需要切换一下canvas就行了,而不需要把canvas A里的东西全部delete,然后再把canvas B的东西画上去。所以我想知道awt有没有提供一个applet或frame支持多个canvas的切换 ? 谢谢