java repaint闪烁_Java swing JFrame用repaint出现闪烁的问题解决

这几天用swing写登录页面背景动图的时候发现一直会有闪烁(我的类是继承JFrame),就来搜原因后发现好像是因为repaint会调用update()方法中的清屏操作导致闪烁。

我当时看的是这个文章

于是按照他的方法重写了update方法,却发现问题没解决

public void paint(Graphics g) {

g.drawImage(skyImag.getImage(), skyX, skyY, null);

g.drawImage(groundImag, groundX, groundY, null);

g.drawImage(dinosaurImag.getImage(), dinoX, dinoY, null);

}

public void update(Graphics g) {

System.out.println("==1==");//这个是我拿来测试会不会调用的输出信息

if (groundImag == null) {

System.out.println("==2==");

//这句话从没输出过,说明了JFrame不会执行清屏操作,即groundImag != null,而Frame跟JPanel好像会执行清屏操作

groundImag = this.createImage(500, 500); // 新建一个图像缓存空间,这里图像大小为800*600,为了使这句话没问题,我把我的对象从ImagIcon对象改成Imag对象

}

Graphics gImage = groundImag.getGraphics(); // 把它的画笔拿过来,给gImage保存着

paint(gImage); // 将要画的东西画到图像缓存空间去

g.drawImage(groundImag, 0, 0, null); // 然后一次性显示出来

}

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

于是我又继续查文章,我发现没什么人用JFrame出现闪烁现象(我上次写飞机大战都没闪烁的说!),所以我查文章的时候放大范围,只要是Java swing编程出现闪烁的文章我都看一遍过去,终于让我看到这个大佬的文章

就是他做的测试,让我知道原来在JFrame中repaint()的时候update()方法就没被调用到,JFrame消除闪烁是在update()中“直接调用了paint()函数而没有clearRect(),也就是清屏的方法,这里他试图不通过清屏来阻止闪烁的发生。”

所以到底是哪一步出问题了。。paint()方法已经被我重写了是不会有清屏操作的,问题感觉只能出在repaint()上,看了repaint()的代码好像也没发现类似清屏的代码,我能力有限,还在学习中,有大佬知道咋回事就求赐教一下QWQ,为了方便大家找repaint()有没有问题我就把代码贴上来吧

public void repaint(long tm, int x, int y, int width, int height) {

if (this.peer instanceof LightweightPeer) {

// Needs to be translated to parent coordinates since

// a parent native container provides the actual repaint

// services. Additionally, the request is restricted to

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值