一. 事件
1.事件来源:本地系统,应用程序本身
2.所有的事件都存储在一个队列里面
3.Java.awt.EventQueue从队列中取数据并派发,EventQueue的派发机制由单独的线程EDT(Event Dispatch Thread)处理。
二.绘制
在前一个小节中描述的, paintImmediately() 就象是一个入口告诉一个 Swing的控件来绘制它自己, 确信所有需要的绘制正确发生. 这个方法也可能用于做同步绘制请求. 就象它的名字所暗示的那样, 有时候控件需要实时地根据它的内部状态来改变它的外观. (e.g. 就象一个 JScrollPane 做滚动操作的时候).
程序不应该直接调用这个方法, 除非有实时绘制的需要. 这是因为异步的repaint() 会使多个重叠的请求有效地合并, 而 paintImmediately() 的直接调用不会. 另外, 调用这个方法的规则是它必须从事件分配线程中调用; 它不是为你的多线程绘制代码所设计的! 要看到 Swing 的单线程模式的细节, 请参见收集的文章 "Swing线程".
1.Swing线程包括:主线程(应用程序的主方法),工具包线程(扑获系统事件),EDT(将扑获的线程派发)
2.异步重绘请求:所有异步请求都是repaint()的变体,包括整个组建的绘制和组建某个区域的绘制
3.同步绘制请求:Jcomponent.paintImmediately()和Component.paint()
三.渲染
1.画家算法
2.paintComponent()
3.paint()
4.setpaque()
四.双缓冲
JSci.swing 的超类是一个抽象类,被称为 JDoubleBufferedComponent。这个类相对来说比较简单,它为自己将要建立于其上的图形提供双缓冲功能。 双缓冲指出接收组件是否应该使用缓冲区来绘画。如果双缓冲被设置为 true,那么来自这个组件的所有图画都将在屏外(offscreen)绘画缓冲区完成。屏外绘画缓冲区稍后将被复制到屏幕上。根据 Javadocs,Swing 绘画系统总是使用***的双缓冲区。如果一个组件有缓冲,而且它的其中一个父组件也有缓冲,那么就使用它的父组件的缓冲区。
JDoubleBufferedComponent 依靠自己而不是 Swing 的双缓冲实现 JComponent 处理双缓冲。这为使用 JSci.swing 包的开发者提供了比只使用 Swing 更细粒度的对双缓冲的控制。
五.Swing线程
1.Swing线程包括:主线程(应用程序的主方法),工具包线程(扑获系统事件),EDT(将扑获的线程派发)
2.线程模型:单一的规则,所以要遵从此规则,尽量将事件让EDT进行派发。
3.invokeLater()
4.isEventDispatchThread()
5.invokeAndWait
六.定时器和事件派发
1.java.util.Timer
2.javax.swing.Timer
七.SwingWorker
1.done()
2.doInBackground()
3.get
4.process
【编辑推荐】