JAVA中的重绘

什么是重绘

当我们创作一个窗体用于装载对象的时候,窗体的每一次变动都能使得我们想要的对象留在窗体上而不是随着变化重新调用paint()时消失掉。

重绘的粗略步骤

当我们的床体每次变化的时候都会重新调用paint()方法,如果我们什么都不添加的话每次变动都会使得窗体上的东西变得一片空白,保存的大概方向呢就是每一次调用paint()方法的时候把我们想要的,或者是想画的重新让它加载出来就好了。

举例

最近在学习写五子棋就拿五子棋棋盘举例,




import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionListener;
import java.util.Arrays;

public class GameUI {
    public void initUI(){
        MFrame jf = new MFrame();
        jf.setSize(900,900);
        jf.setTitle("五子棋游戏");
        jf.setLocationRelativeTo(null);
        jf.setDefaultCloseOperation(3);
        FlowLayout flow = new FlowLayout();
        jf.setLayout(flow);




        GameMouse mouse = new GameMouse();
        jf.addMouseListener(mouse);

        //按钮
        String[] name={"开始游戏","悔棋","重新开始","复盘上把"};
        for(int i=0;i<name.length;i++){
            JButton jbu = new JButton(name[i]);
            jf.add(jbu);
            jbu.addActionListener(mouse);
        }
        jf.setVisible(true);



        Graphics gr = jf.getGraphics();
        mouse.gr = gr;

    }

    public static void main(String[] args) {
        GameUI ui = new GameUI();
        ui.initUI();
    }


}
/

import javax.swing.*;
import java.awt.*;

public class MFrame extends JFrame {

    public int X0=50,Y0=80,SIZE=50,LINE=15,CHESS=50;
    int[][] chessPositions = new int[LINE][LINE];
    //重写窗体的paint方法
    public void paint(Graphics g) {
        //1.保留绘制组件的功能
        super.paint(g);

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

        //2.绘制棋盘
        //画棋盘
        for (int i = 0; i < LINE; i++) {
            g.drawLine(X0, Y0 + i * SIZE, X0 + (LINE - 1) * SIZE, Y0 + i * SIZE);
            g.drawLine(X0 + i * SIZE, Y0, X0 + i * SIZE, Y0 + (LINE - 1) * SIZE);
        }

    }
}

从上面的代码中可以看出我用到了之前学到的继承方法使得MFrame类继承了原来的JFrame类并且保留了原来的功能重写了画棋盘的功能到paint()方法中使得每一次调用paint()方法时自动重画我所想要的棋盘

总结

重绘就是重新绘制出想要的东西,我们可以运用继承,然后重写paint()方法使得每一次的调用让我们想要的东西留下

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值