事件派发线程::事件派发线程是用于swing组件的。当你在main函数里创建一个窗口类的子类像JFrame,就自动创建了一个事件派发线程,如果你在 窗口里按下一个按钮或操作其它控件,就会产生事件,如果你为这个事件定义了响应代码,这些代码就会在事件派发线程里执行。我的理解是事件派发线程里有个事 件队列,事件派发线程不停地检查事件队列,如果有事件就取出来并执行相应操作。
      在java里设置组件的属性后会导致重绘,只不过由于这个重绘事件被放在事件派发线程里,因此随后调用的堵塞动作会导致事件派发线程被Idle,要避免这种情况,应该将这个堵塞动作放到另外的线程里面完成。
repaint()是触发重绘动作,当调用repaint()后,会通知repaintManager增加一个重绘区域,repaintManager在一定条件下会合并一些重绘区域,然后派发一个绘制动作到事件派发线程(EventQueue)。事件派发线程执行到这个绘制事件时,就会调用组件的paint(),在paint()方法里会先调用update来将重绘区域清空(默认情况下是填充白色),然后再调用paintcomponent()来绘制自身,最后调用paintChildren来绘制所有的子。具体流程可以参考JComponent里的paint()方法。
      由于Button按下的动作就是在事件派发线程里的,因此会导致事件派发线程被idle。
      另外需要注意一点的是,paintcomponent()时是直接绘制,是在Socket触发IDle之前,只要这个方法能被执行到,那么就能重新绘制Button。repaint()是产生一个重绘事件到事件派发线程里去了,所以才不行,paintcomponent()没有产生事件而是直接绘制。记住绘制和触发重绘是两个过程。
     不应该在button的Action事件中处理会导致线程阻塞的动作。之所以推荐repaint(),是因为系统会合并绘制,同时repaint()还能避免组件相互覆盖时的绘制错误。

关于:repaint

java里repaint()是重绘component的方法;

repaint()方法用于重绘组件,该方法有下面四种形式:
1。public void repaint()
2。public void repaint(long tm)
//指定调用update方法之前等待的最大毫秒数tm
3。public void repaint(int x,int y,int width,int height)
//重绘组件的指定矩形区域
4。public void repaint(ling tm,int x,int y,int width,int height)
repaint方法不总是马上执行,Java虽然会尽可能快的执行repaint,当Applet运行在较慢的平台上或计算机较忙时,应该考虑使用第2或4种repaint方法,指定在多长时间内必须执行repaint,否则就放弃。

repaint()这个方法是一个具有刷新页面效果的方法,如果你要页面进行重画就可以调用.一般都是在AWT的图形绘制当中调用的到.那么该方法具体的工作原来是怎么样的呢?看下面的结构流程图你就可以大概的了解了:
repaint()方法
|
|
V
AWT线程--->paint()方法-->图形绘制
|
|
V
update()方法--->paint()方法--图形绘制
从上面的流程图可以看出,在绘制动画图形时候如果没有调用repaint()方法的时候直接就是由线程调用paint()方法进行绘制,用repaint()进行刷新显示.但是这样的动画会有个缺点(这样的效果绘制出来会有闪烁).想想做出来的动画总是隔一段时间就闪烁,有人会看吗?那么应该怎么去除闪烁呢?我再下面的文章中会讲到.这里主要的是说明repaint()这个方法.
在调用了repaint()的时候我门可以看出,它并不是直接就去绘制动画(调用paint()),而是通过调用AWT线程在由线程去调用另一个方法update()再由update()调用画笔paint()方法进行绘制.那么这里为什么要多做一步呢?这样是不是为我门多增加代码的书写量呢?回答是当然不会,如果你不调用repaint()那么就不能实现每一次的刷新显示,就只会绘制重叠的图形,不能一张一张的绘制出来.那么其中调用的update()到底是起到什么样的作用呢?
update():清除当前显示并调用paint()方法.当然这个update()方法是可以被修改的,我门在另一篇文章关于"双缓冲技术"中会给大家讲到这点.
综合上面的介绍可以总结出repaint()的工作原理:repaint()通过调用线程再由线程去调用update()方法清除当前显示并再调用paint()方法进行绘制下一个需要显示的内容.这样就起到了一种图片的交替显示从而在视角上形成了动画.

Java | 图形界面中paint,repaint,paintcomponent等函数的理解相关推荐

  1. JAVA图形界面中的事件处理

    在JAVA应用程序或者Applet运行时,如果用户进行某个操作,例如单机鼠标键或者输入字符,程序应当做出适当响应. 那举个例子来说,当我们点击某个按钮,会出现一个按钮事件,那么这个就是按钮的事件处理: ...

  2. 在java图形界面中,在Java中,有哪些图形界面开发工具包?()

    案例分析一:假定CPU的主频是500MHz.硬盘采用DMA方式进行数据传送,其数据传输率为4MB/s, 每次DMA传输的数据量为8KB, 要求没有任何数据传输被错过. 如果CPU在DMA初始化设置和启 ...

  3. java画二维坐标_在图形界面中绘制二维的坐标系统

    在图形界面中绘制二维的坐标系统,其中x轴位于绘图区正中,y轴位于绘图区的最左边.实现以下基本功能: (1)设计界面接受用户输入的实验数据,同时绘制数据点,每个数据点用一个小圆号表示.最后,用直线或曲线 ...

  4. java 图形界面设计,使用JPanel、JFrame 绘图,图形界面设计入门演示,各种主要绘图方法以及图片、文字插入

    那什么是JPanel?JFrame 又是什么呢?让我们先来了解一下他们的区别吧: JFrame是最底层,JPanel是置于其面上,同一个界面只有一个JFrame,一个JFrame可以放多个JPanel ...

  5. Java 图形界面基础

    Java图形界面基础 当你开始验证自己的PC的JDK环境是否配置完成的时候有没有想过这个窗体是怎么做出来的呢? 用几句简单的Java语言就可以做出这样的窗体,不信我可以写给给位看. import ja ...

  6. java图形界面重写坐标_重写自由软件和计算机图形的历史

    java图形界面重写坐标 您还记得上世纪90年代初大多数屏幕保护程序都显示飞扬的3D金属徽标的日子吗? 你有一个吗? 在本文中,我想回顾一下过去,并简要回顾计算机图形学(CG)从研究实验室过渡到每个人 ...

  7. Java图形编程实验总结_实验二java图形界面编程2015级.doc

    实验二java图形界面编程2015级.doc 实验二JAVA图形界面编程一.实验目的熟悉JAVA运行环境,编程掌握JAVASWING组件的图形界面编程.二.实验环境微机,软件MYECLIPSE,JDK ...

  8. java界面布局举例,java图形界面实例

    java写一个图形程序,让数组输出在图形界面上 代码怎么写?别那么复杂的. 已把程序文件打包上传了,并附上运算结果图. import javax.swing.*;import java.awt.*;i ...

  9. Java图形界面编程模拟ATM自助取款系统

    本人学习Java时一直想做一个图形界面的程序,所以利用闲暇时间,做了一个Java图形界面编程模拟ATM自助取款系统,界面简洁漂亮,基本功能ATM功能实现. 程序初始时 考号:123456 密码:123 ...

最新文章

  1. idea dubbo jar error:cvc-complex-type.2.4.c: 通配符的匹配很全面, 但无法找到元素 'dubbo:application' 的声明...
  2. 《微生物学报》“微生物大数据资源”专刊邀稿函
  3. c++构造函数以及类中变量初始化顺序
  4. oracle 11gogg,【OGG】Oracle GoldenGate 11g (二) GoldenGate 11g 单向同步配置 上
  5. USB转WIFI无线网卡驱动程序(内核自带RT5370驱动程序添加)的移植记录之二
  6. Nginx启动后无法访问页面
  7. php获取推特feed twitter timeline feed
  8. C语言深度解剖读书笔记(1.关键字的秘密)
  9. week03_python标准库datetime
  10. ISI CVPR journal ranking
  11. JQuery EasyUI 1.5.1 美化主题大包
  12. 高等数学(第七版)同济大学 习题1-5 个人解答
  13. 【考研英语语法】名词从句的虚拟、主语从句、WH-形式的引导词引导名词从句
  14. 华为认证HCIE的含金量高吗,考试费用是多少?
  15. 数据库中的E—R图画法
  16. MATLAB自定义拟合函数
  17. Chrome终极全屏模式Kiosk
  18. 在不同位置(客户端的终端设备,服务端,项目代码中)判断设备类型(PC、手机、微信等)
  19. Imagewarping变形算法研究---MLSR(Nonrigid image deformation using moving regularized least quares)
  20. 0811 iOS开发完整学习路线

热门文章

  1. C语言小入门之第四篇【实型数据】
  2. JDK8新特性,Lamda简化匿名内部类写法
  3. VSCode中tab自动补全标签
  4. DEF、LEF 文件
  5. C语言的三种基本结构
  6. COA-19-第四章 Integer Arithmetic
  7. 模具最小内腔尺寸标注,动态标注,确定即标注,ObjectARX自定义实体技术
  8. C 语言实例 - 计算一个数的 n 次方
  9. 一站式解决数学规划求解器SCIP的安装与使用
  10. nesC练习:计数器