Java学习 之 画图板 重绘


画图板放大或缩小,移出屏幕后,画的图像就消失了,所以要保存起来,再画一遍!
利用 JFrame或JPanel 的paint:在改变窗体大小时会自动调用的方法
public void paint(Graphics g){}

思路

1、保存图形:创建一个图形类 Shape
图形的属性和方法:
坐标 int
颜色 Color
图形类型 String
drawLine();…
2、在监听器保存图形数据:在绘制这个图形的地方,实例化一个图形对象来保存对应的图形数据
3、将这个图形对象保存到图形数组中
4、重绘
在paint方法中,
遍历这个数组,
取出图形对象,
调用绘制的方法

以直线为例重绘

图形类Shape

保存:
坐标 int
颜色 Color
图形类型 String

public class Shape {
 String name;//图形类型
 Color c;//颜色
 int x1,x2,y1,y2;//坐标

public Shape(String name,Color c,int x1,int y1,int x2,int y2){
  this.name=name;
  this.c=c;
  this.x1=x1;
  this.y1=y1;
  this.x2=x2;
  this.y2=y2;
}

public void draw(Graphics g){
  g.setColor(c);//设置颜色
  if(name.equals("直线")){//重绘
   g.drawLine(x1, y1, x2, y2);
  }
}

画的时候画笔要当做参数传进去,不能作为类的属性保存,不然有时候画不起,不知道为啥,反正就是没搞明白_(:3」∠❀)_

保存单个图形数据

写在鼠标监听器里面,画图形的时候保存起来

int index=0;//图形数据的个数
Shape[] shape=new Shape[1000];//保存图形数据的数组
public void mouseReleased(MouseEvent e){
     x2=e.getX();
     y2=e.getY();
  
     if(btnstr.equals("直线")){
      //保存图形的数据
      Shape sp=new Shape(btnstr,g.getColor(),x1,y1,x2,y2);
      shape[index]=sp;//图形对象写到图形数组中保存
      index++;
      g.drawLine(x1, y1, x2, y2);
     }
}

重写paint方法

自己写个JFrame或者Panel的类,在类里面继承原本的JFrame或者Panel,然后重写paint函数

public class MyJPanel extends JPanel{
 Shape[] shape=new Shape[1000];
 
 public void paint(Graphics g){
  super.paint(g);//先调用原本的paint函数画面板
  System.out.println("paint");
  for(int i=0;i<1000;i++){//遍历图形数组,绘制保存的图形
   if(shape[i]!=null){
   shape[i].draw(g);//调用函数重绘
   }
  }
 }
 
}

把监听器里面保存的图形数组赋值给面板里的图形数组

MyJPanel jpDraw=new MyJPanel();//画图面板
DrawListener dl=new DrawListener();//监听器
jpDraw.shape=dl.shape;
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值