关于paint(),repaint(),paintcomponent()
来源:互联网 发布:每年交通事故数据 编辑:程序博客网 时间:2024/05/14 08:21
一直对这个很模糊,今天找了一些网上的论述,先记下来。
事件派发线程::事件派发线程是用于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()还能避免组件相互覆盖时的绘制错误。
- 关于paint(),repaint(),paintcomponent()
- 关于paint(),repaint(),paintcomponent()
- 关于paint(),repaint(),paintcomponent()
- 关于repaint,paint,paintComponent...的问题
- 关于awt/swing组件中paint, update, paintComponent, repaint的经验
- 关于awt/swing组件中paint, update, paintComponent, repaint的经验
- 关于Graphics类以及paint、paintComponent的用法
- 关于Java中的paint,repaint,update三个方法的关系
- 关于Java中的paint,repaint,update三个方法的关系
- 关于Java中的paint,repaint,update三个方法的关系
- 关于Java中的paint,repaint,update三个方法的关系
- 关于Java中的paint,repaint,update三个方法的关系
- 关于Java中的paint,repaint,update三个方法的关系
- 关于Java中的paint,repaint,update三个方法的关系
- 关于Java中的paint,repaint,update三个方法的关系
- paint(),repaint(),update()
- repaint(),update()和paint()
- update paint repaint
- 领导的饭局
- 有关教育:一个中产母亲的悲情吐槽
- Android数据库事务浅析
- Android Dependencies 是什么?
- 让吹牛都能全世界最棒
- 关于paint(),repaint(),paintcomponent()
- linux下各种解包打包命令大全
- 关于”开源“-”分享“
- 动态电压与频率调节在降低功耗中的作用
- python编码方式
- java中参数传递
- XP下共享磁盘文件夹方法
- 舌尖上的阳朔,除米粉之外的桂菜诱惑
- 移动应用程序开发应考虑的八大安全问题