1 / 20

Java 动画和图形绘图的开发 应用

Java 动画和图形绘图的开发 应用. 报告人: 李 斌 导师:肖炳甲研究员 日期: 2009 年 09 月 25 日. 一、 Java 图形用户界面基础介绍 二、图形渲染 三、动画原理 四、开发与应用. 一、 Java 图形用户界面基础介绍. 抽象窗口工具包 AWT: AWT 是 Java 发布的第一个图形用户界面( GUI ),是一个非常 简单的具有有限 GUI 组件、布局管理器和事件的工具包 。 AWT 使用的 技术是对等设计模式(即 Peer ),其结构关系参见下图。. 一、 Java 图形用户界面基础介绍.

muncel
Download Presentation

Java 动画和图形绘图的开发 应用

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Java动画和图形绘图的开发应用 报告人: 李 斌 导师:肖炳甲研究员 日期:2009年09月25日

  2. 一、Java图形用户界面基础介绍 二、图形渲染 三、动画原理 四、开发与应用

  3. 一、Java图形用户界面基础介绍 • 抽象窗口工具包AWT: AWT 是Java发布的第一个图形用户界面(GUI),是一个非常 简单的具有有限 GUI 组件、布局管理器和事件的工具包 。AWT使用的 技术是对等设计模式(即Peer),其结构关系参见下图。

  4. 一、Java图形用户界面基础介绍 • Java2D: Java2D是Java的图形库,主要包括Point, Line, Rectangle , Ellipse 等常用图形。它包括基本的和高级的绘制操作,图像处理、文本 和打印等功能。 例如:其中GeneralPath 类可表示根据直线、二次曲线和三次曲 线构造的单个或多个几何路径 (图形)。 • Swing: Swing是现今桌面Java开发人员使用的主要GUI库。Swing的一 些底层类是借用了AWT的少数几个基础类 , 然而Swing不再沿用AWT的 Peer对等模式来实现GUI界面,Swing是完全基于Java2D自绘制图形而 实现的 。

  5. 一、Java图形用户界面基础介绍 下图为Swing的部分类关系图,与AWT的类关系图对比可知,Swing 不再沿用Peer对等模式来实现GUI界面。

  6. 一、Java图形用户界面基础介绍 下图为桌面Java图形API分层图,AWT,Java2D和Swing皆为Java的标 准库,三者相互作用,为图中顶部的应用程序提供图形和用户界面库。 其中可以看到,应用程序可以直接调用Swing方法,但是在底层,这些 方法的功能是通过联合调用AWT和Java2D处理的。

  7. 一、Java图形用户界面基础介绍 4. SWT: 鉴于AWT 怪异的界面和SWING 较慢的速度。Eclipse组织编写 的SWT开发包,为Java程序员提供了AWT和SWING之外的一个更佳的 选择。SWT的功能没有通过任何Java虚拟机来操作,而是直接调用 Windows GDI和Shell功能,这一点是通过JNI方法调用完成。 SWT在速度和外观上的改善,伴随着eclipse开发环境的使用得到广 泛的使用,但其也有一些不足之处:SWT 不支持 GUI 控件的自动销 毁 ,只能自顶向下地构建 GUI,需要与Java虚拟机绑定等。

  8. 二、图形渲染基础 这一部分我们通过利用Swing渲染,显示应用程序怎样绘制了在显示器上出现的用户界面。主要讲述以下主题: 事件、绘制、渲染、双缓冲、线程 1.事件:在Java中事件可以是来自本地系统,如:一个可见的窗口或键盘输入,或者来自Java本身,如:一个应用程序产生的请求。这些事件放在一个事件队列中,通过在事件派发线程(EDT)中运行, EventQueue对象在Swing中进行事件置入和派发。

  9. 二、图形渲染基础 • Swing绘制: 发起绘制请求途径:Swing或AWT库自身发起绘制求; 应用程序发起绘制请求。 发起绘制请求方法: 异步请求: Component.repaint() 它告诉Swing需要更新的内容,由Swing安排这 些请求细节,并适当地组合这些请求。 同步请求:JComponent.paintImmediately(), 该请求不会被 放在进行处理的事件队列中,而是程序直接处 理这个绘制请求并继续工作。

  10. 二、图形渲染基础 3. Swing渲染: Swing渲染模式以单线程绘制模式为中心,常用绘制方法有: JComponent.paintComponent(Graphics g) 和 Component.paint(Graphics g), 应用程序可重写这些方法,但重绘时并不需要显式的调用它们,重绘 请求由RepaintManager处理: RepaintManager调用这个组件的 paint() 或 paintComponent() ,然后顺序地渲染组件的内容,边界和 子组件。

  11. 二、图形渲染基础 Java2D图形和图像的绘制过程: 1)获取一个Graphics或者Graphics2D对象。 2)设置这个Graphics对象的属性。 3)用这个Graphics对象绘制图形基本元素或图像。 下面是Swing组件的paintComponent()方法中的示例代码: publicvoid paintComponent(Graphics g) { Graphics2D g2 = (Graphics2D) g; BasicStroke bs1 = new BasicStroke(2f); g2.setStroke(bs1); g2.setColor(Color.RED); g2.draw(IPShape); g.drawImage(eastImage,0,0,null); }

  12. 二、图形渲染基础 4.双缓冲: 为消除屏幕刷新是出现的图像闪烁等缺点,Swing提供了双缓冲机制。所谓双缓冲就是使用一个屏幕之外的,称为后台缓冲的图像作为它的渲染操作的目的地,在适当的时候,把这个后台缓冲复制到屏幕,这样当屏幕更新是会更加平滑。 publicvoid paint(Graphics g) { Dimension d = getSize(); offDimension = d; offImage = createImage(d.width,d.height); offGraphics = offImage.getGraphics(); offGraphics.setColor(getBackground()); offGraphics.fillRect(0,0,d.width,d.height); offGraphics.drawImage(eastImage,0,0,null); g.drawImage(offImage,0,0,null); }

  13. 二、图形渲染基础 • 线程: 当我们运行一个Swing应用程序时,会自动创建三个线 程:第一个是主线程,它运行应用程序的主方法; 第二个线程是工具包线程,它负责捕获系统事件, 它是AWT实现的一部分,从而不运行应用程序的代码; 第三个则是事件派发线程(EDT)。 然而考虑到Swing的单线程规则,我们在编写程序时应 避免在EDT中执行任何冗长的操作,以免导致EDT阻 塞。对此我们可参考下面的代码:

  14. 二、图形渲染基础 public void actionPerformed(ActionEvent e) { new Thread(new Runnable() { public void run() { final String text = readTimeText(); //简单操作 SwingUtilities.invokeLater(new Runnable() { public void run() { ……//要执行的代码 } }) } }).start(); }

  15. 三、动画原理 1、动画的基本思想: 是我们定义的对象(图形,图像等)如何随着时间进 行改变,并到达某一时间点时候适当的渲染这些对象。 2、基本概念: 基于帧的动画:动画的单独的视图称为一帧,而动画则 由一系列这样的帧组成。 帧频:这些帧显示的频率称为帧频。 定时:方式一:使线程睡眠一段时间: Thread.sleep(delay)

  16. 三、动画原理 方式二:定时器的使用:java.util.Timer 和 TimerTask timer = new Timer(); timer.schedule(new TimerTask() { public void run(){ …//要操作的方法 } }, delay);  加速和减速: 与默认恒速动画的突然启动和停止行为相比,加速和 减速的方式可以使动画感觉起来更加平滑。 这种方式可以通过自己编写代码设定帧频实现,也可

  17. 三、动画原理 以通过开源工具包实现。 Timing Framework工具库中Animator框架类提供了内插实现: Animator.setAcceleration (float a); Animator.setDeceleration (float d);

  18. 四、开发与应用 Offline-EastView实现

  19. 四、开发与应用 功能:该程序可按炮号同步显示实验视频,等离子体边界, IP电流信号。 应用平台:根据EASTIM通信系统的插件机制,可将该程序 嵌入到其中,扩展其功能。

  20. 谢 谢!

More Related