什么是重绘
当我们创作一个窗体用于装载对象的时候,窗体的每一次变动都能使得我们想要的对象留在窗体上而不是随着变化重新调用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()方法使得每一次的调用让我们想要的东西留下