图形重绘(Java)

       在使用Java进行画图工具编写时,如果我们改变窗体的状态(隐藏,改变大小),窗体上所有的组件会进行重绘,但我们自己绘制的图形却不再显示,因此我们需要对这些图形进行重绘。

1.根据图形对象设计对应的类,保存当前图形的数据

例:创建Shapes保存数据

public class Shapes {
    //属性
    public int x1,y1,x2,y2;
    public String name;
    //构造方法   格式:public 类名(参数类型 参数名,,){ 方法体..}
    public Shapes(int x1,int y1,int x2,int y2,String name){
        this.name = name;
        this.x1 = x1;
        this.y1 = y1;
        this.x2 = x2;
        this.y2 = y2;
    }
   
 
    public void drawShape(Graphics g){
        switch (name){
            case "直线":
                g.drawLine(x1,y1,x2,y2);
                break;
        }
    }
}

2.创建数组来保存图形对象

public Shapes[] shapeArr = new Shapes[100];

3.将图形对象保存在数组中,并标下标区分

public void mouseReleased(MouseEvent e) {
        
        if ("直线".equals(name)) {
            //绘制图形
            g.drawLine(x1, y1, x2, y2);
 
            //创建Shapes对象保存数据
            Shapes shape = new Shapes(name,x1,y1,x2,y2);
            
            //保存对象到数组中
            shapeArr[index] = shape;
            index++;

        }

4.继承绘制图形的面板类(JPanel),重写该面板的paint方法

例:新建MPanel类去继承JPanel类,即创建一个自定义面板

public class MPanel extends JPanel {
    //引用传递
    // shapeArr 数组默认值是null
    public Shapes[] shapeArr;

    //重写paint方法
    public void paint(Graphics g){
        //1.保留绘制组件
        super.paint(g);

        System.out.println("paint....");

        //2.绘制图形:遍历shapeArr数组
        //NullPointerException:空指针异常
        //用null 对象调用了方法/属性
        for(int i=0;i<shapeArr.length;i++){
            Shapes shape = shapeArr[i];
            if(shape != null){
                shape.drawShape(g);
            }else{
                break;  //跳出循环
            }
        }
    }

}

5.把DrawListener类中shapeArr数组传递给MPanel

drawPanel.shapeArr = listener.shapeArr;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值