java富客户端

来源:互联网 发布:php内存泄漏检测工具 编辑:程序博客网 时间:2024/03/29 20:54

1.      桌面java图形API:swing,awt,java2D

2.      java2D是java的图形库

3.      Swing的渲染

<1>利用Swing渲染,Swing应用程序在界面绘制出Swing组件

<2>Swing的绘制:paint();paintComponent():组件中有很多可以发起绘制的方法,这些方法大体分为两种:同步和异步

<2-1>异步重绘请求:

 异步请求的原理是告诉Swing需要更新的内容,让Swing处理编排这些请求的细节,并适当的组合这些请求.所有异步的请求方法都是repaint()的变体

 Component.repait();

 Component.repait(intx,int y,int weight,int height)

<2-2>同步的绘制请求

     同步的绘制必须比较小心的处理,Swing组件的绘制必须在EDT(Event dispatcher thread)中处理.

     通过调用这些同步的绘制方法,代码必须在正确的线程中以便正确的事在正确的时间发生.如果调用代码不在正确的的线程中,结果可能不确定.

     JComponent.paintImmediately(int x,inty,int w,int h);

     JComponent.paintImmediately(Rectangle r);

     以上两个方法必须在EDT之外调用,他们会立即执行paint();这意味他们没有合并绘制请求

     Component.paint(Graphics g);

4.      Swing的渲染

<1>Swing的渲染模式简单,而且以Swing单线程绘制模式为中心.

   首先把绘制请求放置到事件队列(EventQueue),一段时间后,通过EDT,事件派发到Swing RepaintManager对象,这个对象调用适当对象上的paint().这个绘制导致组件显示绘制它自己的内容,然后绘制它的边框,然后绘制它包含的组件(这些组件称为子组件)


<2>Application关注三个方法

JComponent.paintComponent(Graphicsg)

Component.paint(Graphics g)

JComponent.setOpaque(Boolean).

 

<3>方法介绍

A:JComponent.paintComponent(Graphicsg)

B:Component.paint(Graphicsg)

 

<4>双缓冲

   双缓存通常用于游戏和屏幕中的内容可能快速地改变的其他应用程序。这个技术是用户觉得屏幕的变化比较平滑

 

<5>Thread

   无论什么时候创建Swing应用程序,都会创建3个Thread.

   第一个线程:主线程,运行应用程序

   第二个线程:工具包线程,它负责捕获系统事件.(如键盘按下或者鼠标移动)

   第三个线程:捕获的事件发送到第三个线程EDT

A:线程模式

  Swing的线程模式的单一规则:EDT负责执行任何修改一个组件的状态的方法.

B:任何线程都可以调用的方法

  Repaint() revalidate();  无论哪个线程调用着两个方法,它们都在EDT中完成它们的工作.

C:定时器和事件派发线程

 

 

 

5.      Graphics

<1>Swing定制渲染能力是通过java2D,java2D是Swing的渲染层

<2>我们在富客户端是用图形状态的设定和制图基本元素,一部分使用Graphics,另外一部分使用Graphics2D

<3>渲染:加热动物尸体以提取脂肪

   2D渲染的过程如下:

       获取一个Graphics对象或者Graphics2D对象

       设置这个Graphics对象的属性

       用这个Graphics对象绘制基本图形元素

<4>如何获取Graphics对象:从图形或者组件请求一个或者给定一个

在Graphics中设置哪些属性

用这个Graphics对象执行什么制图操作

 

<5>获取Graphics对象

   <5-1>Swing通常会给定Graphics对象

   <5-2>把克隆和修改做对比

        有一个Graphics对象,要临时修改它的状态,然后把它改变到最初的状态.

      一种方法是新创建一个Graphics对象(最初Graphics的副本),并替代在副本上面修改

   <5-2>渲染到一个图形

        要把图形(graphics)渲染到一个图像(image)

   <5-3>获得一个组件的Graphics对象          

   警告:不要直接调用paint(g),让Swing为你调用.如果需要让Swing绘制一个组件,调用这个组件的repaint();或者,如果在EDT中平且必须立即渲染一些内容,调用paintImmediately(),不要自己从这个组件中获取一个Graphics对象并调用paint().这样会发生不好的事情.

 

<6>图形状态

Graphics的属性称谓图形状态

 

7 图像

<1>图像只是另外一个图形元素

<2>

Java.awt.Image 76

 

8 性能

<1>面向图形的应用程序最重要的优化规则是绝对不会绘制任何不必要的东西。Swing提供了一个内部机制:剪辑

 

Graphics.setClip(int x,int y,int weight,int height)                

 

9 动画

<1>基于帧的动画

<2>移动应该基于时间

<3>复杂的动画都是基于一个基本的原理:随着时间的流逝改变属性并用这些改变的属性渲染画面。