问题描述
我把两个canvas添加到frame,然后向通过按钮点击来实现切换canvas,但发现的结果却是只能显示最后加进去的canvas,为了方便大家,我把我的程序贴在下面,请大虾们帮忙!packagemutiple.canvas;importjava.awt.BorderLayout;importjava.awt.Button;importjava.awt.Canvas;importjava.awt.Color;importjava.awt.Dimension;importjava.awt.Frame;importjava.awt.Graphics;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;publicclassSaveCanvasextendsFrame{ImageCanvasic=newImageCanvas();ImageCanvas2ic2=newImageCanvas2();booleanflag=false;publicSaveCanvas(){Buttonb=newButton("savecanvas");b.addActionListener(newActionListener(){publicvoidactionPerformed(ActionEventae){if(flag){ic.setVisible(true);ic2.setVisible(false);}else{ic.setVisible(false);ic2.setVisible(true);}flag=!flag;}});setLayout(newBorderLayout());add(b,BorderLayout.NORTH);add(ic,BorderLayout.CENTER);add(ic2,BorderLayout.CENTER);setSize(newDimension(400,400));setVisible(true);ic.setVisible(false);ic2.setVisible(false);}publicstaticvoidmain(Stringargs[]){newSaveCanvas();}classImageCanvasextendsCanvas{publicvoidpaint(Graphicsg){g.setColor(Color.blue);g.fillRect(0,0,this.getWidth(),this.getHeight());g.setColor(Color.red);g.drawLine(0,0,this.getWidth(),this.getHeight());}}classImageCanvas2extendsCanvas{publicvoidpaint(Graphicsg){g.setColor(Color.blue);g.fillRect(0,0,this.getWidth(),this.getHeight());g.setColor(Color.red);g.drawLine(0,this.getHeight(),this.getWidth(),0);}}}
解决方案
解决方案二:
只支持加一个Canvas,前面的都会被最后一个覆盖。。
解决方案三:
你只要改变画的东西就可以达到你要的切换效果啦,一般不需要一个以上的Canvas来操作
解决方案四:
上面的程序只是我用于测试的例子,而我真正就是要实现两个canvas的切换,因为两个canvas都各自画着不同的东西,当要到达切换的临界点时,只需要切换一下canvas就行了,而不需要把canvasA里的东西全部delete,然后再把canvasB的东西画上去。所以我想知道awt有没有提供一个applet或frame支持多个canvas的切换?谢谢