java中的repaint_java 中paint .repaint.update

paint,repaint,update,这3个都跟绘图有关系的相关的方法把。

这3个虽然以前用过,但是但是没有完全理解。

下面这个段话是转载的(感觉讲的比较好):

repaint()这个方法是一个具有刷新页面效果的方法,如果你要页面进行重画就可以调用.

从上面的流程图可以看出,在绘制动画图形时候如果没有调用repaint()方法的时候直接就是由线程调用paint()方法进行绘制,用 repaint()进行刷新显示.但是这样的动画会有个缺点(这样的效果绘制出来会有闪烁).想想做出来的动画总是隔一段时间就闪烁,有人会看吗?那么应 该怎么去除闪烁呢?我再下面的文章中会讲到.这里主要的是说明repaint()这个方法.

在调用了repaint()的时候我门可以看 出,它并不是直接就去绘制动画(调用paint()),而是通过调用AWT线程在由线程去调用另一个方法update()再由update()调用画笔 paint()方法进行绘制. 那么这里为什么要多做一步呢?这样是不是为我门多增加代码的书写量呢?回答是当然不会,如果你不调用repaint()那么 就不能实现每一次的刷新显示,就只会绘制重叠的图形,不能一张一张的绘制出来.那么其中调用的update()到底是起到什么样的作用呢?

update():清除当前显示并调用paint()方法.当然这个update()方法是可以被修改的.

综合上面的介绍可以总结出repaint()的工作原理:repaint()通过调用线程再由线程去调用update()方法清除当前显示并再调用paint()方法进行绘制下一个需要显示的内容.这样就起到了一种图片的交替显示从而在视角上形成了动画.

下面的代码是我写的相关的例子,仅供大家参看,如有什么不足,请大家指教啊

laugh.gif,共同学习啊,

该代码的功能的是实现动态的画线:

//主类

import javax.swing.*;

import java.awt.event.*;

public class FrameDraw extends JFrame// implements MouseListener

{

private DrawPanel panel=null;

public FrameDraw(){

panel=new DrawPanel();

this.add(panel);

this.setVisible(true);

this.setSize(300,300);

}

public static void main(String[] args)

{

new FrameDraw();

}

}

调用的类:

import javax.swing.*;

import java.awt.*;

import java.awt.event.*;

public class DrawPanel extends JPanel implements MouseListener

{

static int x=0,x1=0,y=0,y1=0;

public DrawPanel(){

this.addMouseListener(this);

}

public void paint(Graphics g){

super.paint(g);

Image image=Toolkit.getDefaultToolkit().getImage("images/psu.jpg");

g.drawImage(image,0,0,300,300,this);

g.drawLine(x,y,x1,y1);

}

public void mouseClicked(MouseEvent e){

//获取起点坐标

if(e.getButton()==MouseEvent.BUTTON3){

x=e.getX();

y=e.getY();

//label.setText("鼠标点击的位置 启动坐标:"+" "+"x...."+x+"y...."+y);

System.out.println("x..."+x+"...."+y);

}

//获取终点坐标

if(e.getButton()==MouseEvent.BUTTON1){

x1=e.getX();

y1=e.getY();

System.out.println("终点的坐标..."+x1+"..."+y1);

//当左击的时候,进行连线

if(y>=0||x>=0)

{

this.repaint();

this.validate();

}

else

System.out.println("数据出错。。。");

}

}

public void mouseEntered(MouseEvent e){

}

public void mouseExited(MouseEvent e){

}

public void mousePressed(MouseEvent e){

}

public void mouseReleased(MouseEvent e){

}

public static void main(String[] args) {

new DrawPanel();

}

}

参与评论 您还未登录,请先 登录 后发表或查看评论

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:深蓝海洋 设计师:CSDN官方博客 返回首页

打赏作者

GreedyAbyss

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值