`
空空儿
  • 浏览: 136693 次
  • 性别: Icon_minigender_2
  • 来自: 杭州
社区版块
存档分类
最新评论

Swing渲染基本原理<一>

    博客分类:
  • J2SE
阅读更多

   利用Swing渲染,Swing应用程序绘制了在显示器上出现的用户界面。主要包括在事件、绘制 、渲染、双缓冲、线程。
    事件:Swing接收和处理事件的方式是理解线程如何在Swing内部交互及理解应用程序如何与Swing和AWT事件交互的关键。在Java中,事件可以来自本地系统,如一个可见的窗体或键盘输入。也可也是Java本身,如应用程序产生的请求。所有的时间都是放在一个事件队列中的,Java.awt.EventQueue负责取出事件并来派发事件,它的机制是一个单独的线程管理,叫做事件派发线程。
   绘制:Swing中的绘制是应用程序用来更新显示的过程,它也是由事件队列所受的影响来影响Swin组件的paint()和paintComponent()来绘制。是通过Swing或AWT库自身发起一个绘制请求,或应用程序代码发起这样子的一个请求。在这样子的情况下发起的请求,应用程序代码知道,基于一些内部状态的改变,显示也应该改变。
   组件中发起绘制方法的主要分为两类:异步请求和同步请求。

    异步绘制请求的工作原理 告诉Swing需要更新内容,让Swing处理了编排这些请求的细节,并适当的组合这些请求。所有的异步请求都是repaint()得变体,它也可以分为两类:整个组件的更新<Component.repaint()>和指定区域的更新<Component.repaint(int x,int y,int width,int height)>。

repaint()的底层告诉Swing必须更新整个组件区域。如果这个组件是一个容器,后续的paint()方法的调用还会导致每个子组件更新自身。重绘请求可以说是合并,例如,请求一个重绘,而在对垒中已经有一个还没有运行过的重绘请求,那么第二个请求将被忽略,因为已经由最早的那个请求执行了。
  第二个方法和repaint()一样,只是重新绘制一个组件的部分区域
  一个简单的repaint()等同于repait(0,0,getWedth(),getHeight()).

   同步绘制请求:在处理同步绘制时必须小心处理,它必须在事件派发线程中进行,并且代码必须在正确的线程中以便正确的时间发生,如果不是正确的线程,结果也会不对。
    它也有两个方法几个方法,
    JComponet.paintImmediately(int x, int y,int w, int h) 和 JComponent.parintImmediately(Rectangle r)
  这两个方法是相同的,都是指定需要更新的区域。要强制一个组件内容同步绘画,paintImmediately()是唯一需要的方法。用它来告诉组件指定区域更新,内部是调用适当的paint();有几个缺点是不止必须在派发事件线程中,还得立刻执行paint(),所以意味着它是没有合并绘画请求的。
  还有一个是夜是Compont.paint(Graphics),正常发展情况下是不会调用的paint()的。但是在特定的情况下会调用,例如当要把一个组件渲染到一个图像,而不是它在Swing窗口中通常的位置。

      
1
3
分享到:
评论

相关推荐

    JAVA最简单的MVC架构DEMO

    本DEMO是针对初学者的一个简单教学版本,旨在帮助理解MVC的基本概念和工作流程。 **一、Model(模型)** 模型层负责处理业务逻辑和数据操作。在这个DEMO中,`Model`类通常会与数据库或其他数据源交互,获取或存储...

    狂神说全部笔记内容.zip

    学习HTML时,需要掌握基本标签如`&lt;html&gt;`, `&lt;head&gt;`, `&lt;body&gt;`, `&lt;p&gt;`, `&lt;a&gt;`等,以及更复杂的结构如表格、列表、图像、链接、表单等。HTML5的引入带来了更多新特性,如音频、视频、canvas绘图以及离线存储等,使得...

    java_swing_更酷的Jlist.

    基本原理 在Swing框架中,`JList` 和 `JComboBox` 都可以使用 `ListCellRenderer` 来定制其单元格的渲染方式。`ListCellRenderer` 的作用在于为列表中的每个条目提供一个自定义的视图组件。这个接口定义了一个方法...

    Java JFreeChart 后台生成折线图

    &lt;groupId&gt;org.jfree&lt;/groupId&gt; &lt;artifactId&gt;jfreechart&lt;/artifactId&gt; &lt;version&gt;1.5.3&lt;/version&gt; &lt;/dependency&gt; ``` 生成折线图的过程通常包括以下几个步骤: 1. **创建Dataset**:首先,你需要创建一个包含数据...

    java桌面程序swing demo实例

    2. **JComponent**: 所有Swing组件的基类,提供了基本的事件处理和渲染能力。大部分Swing组件(如JButton、JLabel、JTextArea等)都继承自JComponent。 3. **布局管理器**: Swing提供了多种布局管理器,如...

    SWING表头合并

    总的来说,Swing中的表头合并涉及到对组件渲染的自定义,需要理解绘图的基本原理以及Swing组件的工作机制。通过这种方式,你可以创建出更加符合用户需求的界面,提升用户体验。记得在实际开发中,不仅要关注功能实现...

    jdk_swing_源码实现分析

    Swing是Java编程环境中用于构建图形用户界面(GUI)的一个组件库,它是Java Foundation Classes (JFC)的一部分。Swing提供了丰富的组件集,包括按钮、文本框、菜单等,允许开发者创建美观且功能强大的应用程序。在...

    Java Applet程序设计

    3. `&lt;param&gt;`标签:传递参数给Applet,例如在实验程序中,设置了字体颜色、字体类型和字体大小。 四、实验程序分析: 在提供的源代码中,`ShowTime`类的`init()`方法读取HTML页面通过`&lt;param&gt;`标签传递的参数,如...

    Swing 幻方

    在Java中实现幻方,不仅可以帮助初学者掌握Swing的基本用法,还能加深对算法和数值计算的理解。 Swing是Java的一个图形用户界面(GUI)工具包,它是Java Foundation Classes (JFC)的一部分,用于构建桌面应用程序。...

    【教程】100个Java GUI swing的小程序.rar

    本教程包含了100个使用Swing编写的GUI小程序,这些程序可以帮助初学者和有经验的开发者深入理解Swing的工作原理以及如何在实践中应用它。 1. **Java Swing基础** - Swing是Java AWT(Abstract Window Toolkit)的...

    SWING资料大集合

    - **《JFC/Swing教程》**:本书虽然针对的是较旧的JDK版本,但对于理解Swing的基本原理仍然很有帮助。 - **《Java Swing(第二版)》**:该书对Swing进行了详细的讲解,适用于想进一步提高Swing应用开发能力的读者...

    swing开源皮肤Substance6.1

    Swing开源皮肤Substance6.1是一款为Java Swing应用程序提供美观界面的库,它极大地提升了Swing组件的视觉效果,让应用看起来更加现代和专业。Substance库是完全开源的,允许开发者根据需要自定义和扩展皮肤,为用户...

    文字缩放出现.rar文字缩放出现.rar

    1. **文字缩放的基本原理**: 文字缩放是通过改变文本的字体大小来调整其在屏幕或打印媒介上的视觉效果。在计算机图形学中,这通常涉及到调整字体的点尺寸(points)或像素尺寸(pixels)。在Web开发中,CSS(层叠...

    精通Swing源代码

    本资源"精通Swing源代码"显然是为了帮助开发者深入理解Swing的工作原理和最佳实践,通过实例源码来提升Swing应用的开发技能。 Swing提供了丰富的组件库,如按钮、文本框、菜单、滚动面板等,这些组件可以用来创建...

    基于Java Swing的一个飞机躲避子弹小游戏源代码

    本项目是一个利用Java Swing开发的简单飞机躲避子弹的小游戏,旨在帮助初学者理解Swing的基本用法以及游戏编程的基本原理。 游戏的操作方式简单易懂,玩家通过键盘上的W、A、S、D键控制飞机的移动,向上、左、下、...

    精选_基于Java.Swing实现的俄罗斯方块_源码打包

    通过分析这个项目,开发者可以学习到如何利用Java.Swing库创建游戏,理解事件处理、图形绘制和多线程编程等重要概念,同时也能体会到游戏设计的基本原理。对于初学者来说,这是一个很好的实践项目,能够提升对Java ...

    java_swing大量的table例子

    1. `JTable`构造:`JTable()`、`JTable(Object[][] rowData, Object[] columnNames)`等,可以用来创建一个基本的表格,其中`rowData`表示行数据,`columnNames`是列名。 2. 模型与视图:`JTable`采用MVC(模型-视图...

    Swing框架定制Component

    它的工作原理是向事件队列发送一个`PAINT`事件,由事件调度线程执行。 - **update方法**: 在AWT时代,`update`方法用于绘制组件的背景和前景。但是随着Swing的引入,这部分逻辑被合并到了`paint`方法中,使得`...

    基于Java Swing的桌面弹球游戏运行包

    通过这个弹球游戏项目,学习者不仅可以掌握Java Swing的基础知识,还能了解到游戏开发的一些基本原理和技巧。实际操作中,开发者需要结合Java多线程、图形渲染、用户输入处理等多个方面的技术,这对提升Java编程技能...

Global site tag (gtag.js) - Google Analytics