画板加上重绘"/>
java 给小画板加上重绘
在窗口最小化、改变窗口的位置、大小等操作时 我们会发现原先已经画好的图不见了
这到底是为什么呢?
简单点说是因为在对窗口进行这些操作时,窗口重新绘制了一遍,而由于我们没有重写JFrame里的paint()方法,所以调用的是父类的方法。
public void paint(Graphics g) {
//调用父类的方法 super.paint(g);
//list里存放每个图形的对象for (int i = 0; i < list.size(); i++) {Shape s = list.get(i);s.draw(g);}
}
这里的list里存放的是 你的每个图形
public class Shape implements {/*** */public int x1, y1, x2, y2;public Color color=Color.black;public String type;public ImageIcon icon;public Shape(int x1, int y1, int x2, int y2, Color color, String type) {this.x1 = x1;this.y1 = y1;this.x2 = x2;this.y2 = y2;this.color = color;this.type = type;
}
public Shape(ImageIcon icon,int x1,int y1,int x2,int y2,String type)
{this.icon=icon;this.x1 = x1;this.y1 = y1;this.type=type;}public void draw(Graphics g) {g.setColor(color);if (type.equals("直线")) { g.drawLine(x1, y1, x2, y2);} else if (type.equals("矩形")) { g.fillRect(x1, y1, x2, y2);} else if (type.equals("圆")) { g.drawOval(x1, y1, x2, y2);}else if(type.equals("图片")){g.drawImage(icon.getImage(),x1,y1,null);}else if(type.equals("五角星")){ g.drawLine((x1+x2)/2,y1,(x2+4*x1)/5,y2);g.drawLine((x1+x2)/2,y1,(x1+4*x2)/5,y2);g.drawLine(x1,(3*y1+2*y2)/5,x2,(3*y1+2*y2)/5);g.drawLine(x1,(3*y1+2*y2)/5,(x1+4*x2)/5,y2);g.drawLine((x2+4*x1)/5,y2,x2,(3*y1+2*y2)/5);}else if (type.equals("立方体")){int a=(x2+y2-x1-y2)/2;g.drawRect(x1, y1, x2-x1,y2-y1);g.drawLine(x1, y1, x1+a, y1-a);g.drawLine(x1+a, y1-a,x2+a, y1-a);g.drawLine(x2, y1, x2+a,y1-a);g.drawLine(x2, y2, x2+a, y2-a);g.drawLine(x2+a,y1-a,x2+a,y2-a);}
}}
更多推荐
java 给小画板加上重绘
发布评论