`

swing学习笔记 - Swing Rendering Fundamentals

    博客分类:
  • JAVA
阅读更多

swing的渲染原理主要包括了Event,Painting,Rendering,Double Buffering,Threading,逐一介绍一下

Event:

     事件在程序中可以有本地系统引发,或者java程序自己引发,或者应用程序自己构建,所有的事件都有事件队列EventQueue进行统一维护和分发,他是一个单线程的,叫做EDT,后面的Threading中将介绍。他是一个非常重要的机制,是保障高效、灵活的基础。

Painting

    在swing更新应用程序的界面时候执行代码,可以执行标准的组件代码,也可执行自定义代码。

     painting进程主要包含了发送EDT的paint请求数据和EDt执行paint和paintComponent的执行结果。

    二种数据来源:

    1)swing或者awt发送的repaint请求

    2)应用程序发送的请求

    例如:窗口大小变化,awt会接受本地的请求,进行repaint自己。在swing中一个按钮鼠标移动到上面,状态发生变化,repaint自己,也可以在执行代码中去执行repaint,执行控件的绘制。

  一般来说repaint是自动的,swing在发现了状态变化以后会自动执行repaint。

   repaint主要包含二种类型

    1)asyschronous:告诉swing需要更新,具体计划有swing自己安排,他分为按照控件重绘和按照区域重绘二种,这样可以提高效率。

    2)syschronous:马上绘制,需要注意保证在正确的线程中,比较容易引起死锁,尽量少用。调用方法paintImmediately

Rendering:

    paint在jdk中比较重要的方法介绍

    paintComponent:如果定义的组件需要自定义render,覆盖此方法,进行组件的绘制

    paint:绘制,他其中调用了paintComponent,paintBorder等方法,如果覆盖了需要保证他们的执行。不建议覆盖此方法,但是对于如果需要绘制半透明的组件,其中的边框也是半透明的,可以覆盖此方法进行处理。一般情况下AWT组件是覆盖paint方法,swing的组件,覆盖paintComponent方法。

    setOpague:设置是否透明

Threading:

    应用程序启动以后需要启动三个进程,一个主进程,一个是tookit进程,一个是EDT。

    一个给textarea输入一个字符的事件需要进行如下处理:

    按下键盘,eDT接受到事件,然后转给组件进行处理,因为组件已经注册了事件监听,然后监听在转给EDT,EDT接收到事件后分发给compoent进行repaint。

   需要特别注意,EDT是单进程的,如果在进程中进行长时间的线程阻塞,会造成程序的假死,是一种非常不好的感知,这种方式有以下几种解决办法:(注意并不是只有swing是单线程的,其中的swt,qt,.net winForm都是单线程的)

   1)采用编写新的线程.

       new Thread(){

       }.run()

       这种方式可以将长时间的启动新的线程进行处理,不阻塞EDT,这样可以满足处理,但是啊违背了EDT的单线程原则,在长时间的处理完成以后,需要更新空间的属性,有一个新的线程去更新,可能会造成不法判断的问题。这个时候很有可能就会出现个人测试怎么都不会有问题,到客户哪里就经常出现问题的局面。

   2)采用SwingUtilities的三个方法进行处理

      A)invokeLater:这个方法是在处理的过程中给EDT发送新的处理,然后让EDt进行安排方法体内部的处理。

           这个正好可以上面的1中的更新空间内容部分的问题,可以如下编码

           new Thread(){

               public void run(){

                     StringUtilities.invokeLater(new Runable(){

                             //run

                       });

               }

           }.run()

 

       B)isEventDispatchThread:判断是否是EDT线程,

     public void setLable(){

        Runable test= new Runable(){

               //处理函数

               public void run(){}

        }

        if(SwingUtilities.isEventDispatchThread()){

            test.run();

        }else{

             SwingUtilities.invokeLater(test);

         }

}

     c)invokeWait:执行等待,知道EDT返回值

    jdk中二个Timer的区别:

     java.util.Timer:不能执行EDt线程,只能通过SwingUtilities的invokeLater执行EDt

     javax.swing.Timer,可以执行EDt线程

   SwingWorker:SwingUtilities的功能非常强大,但是使用它以后会出现大量的内部类,在jdk6中添加了一个javax.swing.SwingWorker他可以满足这个功能,不用出现大量的匿名类

    编写一个子类,继承自swingWorker,然后覆盖其中的doinBackground方法,

    doinBackground:是执行的方法,返回t

    在中间如果需要向EDT发送消息,可以采用pushlish(V)

    结束以后可以调用done方法,在方法中可以用get方法取出doInBackground方法的值

 

分享到:
评论

相关推荐

    Real-Time+Rendering+3rd+edition

    Real-Time+Rendering+3rd+edition,Real-Time+Rendering+3rd+edition,Real-Time+Rendering+3rd+edition,Real-Time+Rendering+3rd+edition,Real-Time+Rendering+3rd+edition,Real-Time+Rendering+3rd+edition

    server-side-rendering-comparison, 服务器端渲染比较.zip

    server-side-rendering-comparison, 服务器端渲染比较 服务器端呈现比较基准信息NODE_ENV=production 。renderToString 都需要 lib 而不是 dist具有 600个dom节点运行# preparenpm installnpm run

    Real-Time-Rendering-3rd提炼总结.pdf.zip

    《Real-Time Rendering 3rd》 是一本在计算机图形学领域极具权威性的著作,专注于实时渲染技术。...通过学习这些知识,开发者可以构建出更为逼真且高效的实时图形应用,如游戏、虚拟现实、可视化工具等。

    High-Performance Polygon Rendering

    This paper describes a system architecture for realtime display of shaded polygons. Performance of 100,(300 lighted, 4-sided polygons per second is achieved. Vectors and points draw at the rate of 400...

    Real-Time Rendering, Fourth Edition PDF

    Real-Time Rendering, Fourth Edition 实时渲染最新版 第四版PDF,下载地址见文档....

    ogre(O-O Graphics Rendering Engine)中文版

    ### OGRE(O-O Graphics Rendering Engine)中文版 #### OGRE简介 OGRE是一个高度灵活、性能优秀的3D渲染引擎,适用于游戏开发等图形密集型应用。它采用面向对象的设计理念,提供了丰富的功能集和良好的扩展性。 ...

    server-side-rendering-master.rar

    server-side-rendering-master.rar

    Algorithm-parallel-volume-rendering.zip

    Algorithm-parallel-volume-rendering.zip,群集上并行体绘制的概述和详细讨论。我们描述了在高性能集群上实时呈现大数据的算法、优化技术和挑战。,算法是为计算机程序高效、彻底地完成任务而创建的一组详细的准则。

    Physically-Based.Rendering.-.From.Theory.To.Implementation.pdf

    作者还指导读者如何循序渐进地阅读本书,确保学习过程既系统又高效。 #### 几何与变换 几何与变换是渲染技术中的基础概念。本书详细介绍了向量、点、法线、射线等基本几何元素,以及三维包围盒的应用。变换部分则...

    Real-Time Graphics Rendering Engine

    《实时图形渲染引擎》是一本深入探讨实时图形渲染技术的权威著作,对于想要在游戏开发、虚拟现实、增强现实等领域从事引擎开发的人员来说,这本书是不可或缺的学习资源。书中涵盖了图像学的基础理论以及高级技术,...

    Real-Time Rendering 4rd全彩高清

    Real-Time Rendering 4rd最新版,高清大概800M,详细介绍渲染知识

    Real-Time Rendering 4th Edition高清全彩版

    Real-Time Rendering 4th Edition(实时渲染第4版) 高清全彩版,图形学/游戏方向实时渲染经典书籍推荐,仅供学习使用。百度网盘下载链接永久有效。

    Screen-Space-Perceptual-Rendering-of-Human-Skin-Slides.zip

    "Screen-Space-Perceptual-Rendering-of-Human-Skin-Slides" 提供的文档着重介绍了如何在屏幕上模拟人类皮肤的感知渲染技术。 首先,我们要理解皮肤的基本结构。它由三层主要部分组成:薄油层、表皮和真皮层。薄...

    Real-Time Rendering Fourth Edition

    附件为百度网盘链接。...Real-Time Rendering Forth Edition 2018年最新第四版,实时计算机图形学百科全书全新版本,图形学必备,完美pdf版本,非扫描版,可以选择字体,强烈推荐。文件较大,将近1G。

    ShaderX 3.-.Advanced Rendering

    ShaderX 3.-.Advanced Rendering电子书,里面很多游戏特效

    gpu-pro-360-guide-Rendering2018

    Silhouette Rendering Pencil Rendering Acknowledgments Bibliography Alpha Blending as a Post-Process Benjamin Hathaway Introduction The Alternatives The Source Artwork Initial Attempts The Screen-Space...

    Real-Time Rendering 4th Edition完整版 全彩 892MB

    Real-Time Rendering 4th Edition完整版 全彩 pdf 892MB 这里挂的是百度云链接

Global site tag (gtag.js) - Google Analytics