Swing模式就是走RepaintManager的方法语言&工具

来源:互联网 / 作者:SKY / 2017-11-27 16:26 / 点击:
本文先容Swing模式就是走RepaintManager的方法。以及先容顶层容器除了在对等体发过动静后处理赏罚paint,也具有本身的repaint要领去主动缔造绘画机缘。
CTO实习营 | 12月3-5日,深圳,是时辰成为优越的技能打点者了

SHOW_FROM_DOUBLE_BUFFER 思量双缓存支持,将举办rm.show,其交给getPaintManager().show,时代站长网,这时的paintmanager是颠末尾前面所说的几参数选择的,也就是说,思量当前是否当前正使能双缓存doubleBufferingEnabled,是否不行使当地双缓存 nativeDoubleBuffering, BUFFER_STRATEGY_TYPE是否指定了每窗口缓存的双缓存支持计策,假如没有指定计策是否或当地windows体系情形没有开启vista dwm结果,假如都满意将行使BufferStrategyPaintManager,借由swing提供每窗口双缓存机制,搜查swing记录中是否具有有用缓存,若存在则会要求该区直接拷贝flip即可,假如没有乐成执行双缓存拷贝,则将插手Repaintmanager重画地区举办swing模式的重画。

顶层容器除了在对等体发过动静后处理赏罚paint,也具有本身的repaint要领去主动缔造绘画机缘。

publicvoidrepaint(longtime,intx,inty,intwidth,intheight){  if(RepaintManager.HANDLE_TOP_LEVEL_PAINT){//属性swing.handleTopLevelPaint确定,默认true  RepaintManager.currentManager(this).addDirtyRegion(  this,x,y,width,height);  }  else{  super.repaint(time,x,y,width,height);  }  

这里的repaint将起首确定RepaintManager.HANDLE_TOP_LEVEL_PAINT-假如不支持将委托给 Component.repaint,形成PaintEvent并举办提交走AWT模式。支持的话将促使RepaintManager插手重画区后通过调治走SWING模式。SWING模式就是走RepaintManager的方法。自身的repaint不会去思量每窗口双缓存直接拷贝地区,由于这时的需求就是要求从头绘画。

轻量级swing组件在本身的repaint要领去主动缔造绘画机缘。JComponent.Repaint{RepaintManager.currentManager(this).addDirtyRegion}走SWING模式处理赏罚。SWING模式都是借由RepaintManager来布置绘画,它维护了一个几许地区并认真重画的框架。外界老是要求先插手RepaintManager重绘区,在插手的同时激提倡一个调治重画的

SunToolkit.getSystemEventQueueImplPP(context).  postEvent(new InvocationEvent(Toolkit.getDefaultToolkit(),  processingRunnable))  

InvocationEvent。
留意,通过上文说明,对付顶层容器处理赏罚底层动静的触发时,走Swing模式处理赏罚而通过swingpaintEventdispatcher 去建设painitevent时除向repaintmanager挂号脏区(假如不行使每窗口双缓存计策)外,还要特殊post一个 IgnorePaintEvent。该paintevent在随后的EDT里按awt模式走peer处理赏罚时并没有插手awt的重画脏区,现实上忽略掉了绘制意义,这样做停止了在swing和awt两种模式的一再绘制,但同时形成依然将paint变乱关照到组件的结果。

publicvoidcoalescePaintEvent(PaintEvente){  Rectangler=e.getUpdateRect();  if(!(einstanceofIgnorePaintEvent)){  paintArea.add(r,e.getID());  
阅读延展

1
3