200 likes | 422 Views
Java 动画和图形绘图的开发 应用. 报告人: 李 斌 导师:肖炳甲研究员 日期: 2009 年 09 月 25 日. 一、 Java 图形用户界面基础介绍 二、图形渲染 三、动画原理 四、开发与应用. 一、 Java 图形用户界面基础介绍. 抽象窗口工具包 AWT: AWT 是 Java 发布的第一个图形用户界面( GUI ),是一个非常 简单的具有有限 GUI 组件、布局管理器和事件的工具包 。 AWT 使用的 技术是对等设计模式(即 Peer ),其结构关系参见下图。. 一、 Java 图形用户界面基础介绍.
E N D
Java动画和图形绘图的开发应用 报告人: 李 斌 导师:肖炳甲研究员 日期:2009年09月25日
一、Java图形用户界面基础介绍 二、图形渲染 三、动画原理 四、开发与应用
一、Java图形用户界面基础介绍 • 抽象窗口工具包AWT: AWT 是Java发布的第一个图形用户界面(GUI),是一个非常 简单的具有有限 GUI 组件、布局管理器和事件的工具包 。AWT使用的 技术是对等设计模式(即Peer),其结构关系参见下图。
一、Java图形用户界面基础介绍 • Java2D: Java2D是Java的图形库,主要包括Point, Line, Rectangle , Ellipse 等常用图形。它包括基本的和高级的绘制操作,图像处理、文本 和打印等功能。 例如:其中GeneralPath 类可表示根据直线、二次曲线和三次曲 线构造的单个或多个几何路径 (图形)。 • Swing: Swing是现今桌面Java开发人员使用的主要GUI库。Swing的一 些底层类是借用了AWT的少数几个基础类 , 然而Swing不再沿用AWT的 Peer对等模式来实现GUI界面,Swing是完全基于Java2D自绘制图形而 实现的 。
一、Java图形用户界面基础介绍 下图为Swing的部分类关系图,与AWT的类关系图对比可知,Swing 不再沿用Peer对等模式来实现GUI界面。
一、Java图形用户界面基础介绍 下图为桌面Java图形API分层图,AWT,Java2D和Swing皆为Java的标 准库,三者相互作用,为图中顶部的应用程序提供图形和用户界面库。 其中可以看到,应用程序可以直接调用Swing方法,但是在底层,这些 方法的功能是通过联合调用AWT和Java2D处理的。
一、Java图形用户界面基础介绍 4. SWT: 鉴于AWT 怪异的界面和SWING 较慢的速度。Eclipse组织编写 的SWT开发包,为Java程序员提供了AWT和SWING之外的一个更佳的 选择。SWT的功能没有通过任何Java虚拟机来操作,而是直接调用 Windows GDI和Shell功能,这一点是通过JNI方法调用完成。 SWT在速度和外观上的改善,伴随着eclipse开发环境的使用得到广 泛的使用,但其也有一些不足之处:SWT 不支持 GUI 控件的自动销 毁 ,只能自顶向下地构建 GUI,需要与Java虚拟机绑定等。
二、图形渲染基础 这一部分我们通过利用Swing渲染,显示应用程序怎样绘制了在显示器上出现的用户界面。主要讲述以下主题: 事件、绘制、渲染、双缓冲、线程 1.事件:在Java中事件可以是来自本地系统,如:一个可见的窗口或键盘输入,或者来自Java本身,如:一个应用程序产生的请求。这些事件放在一个事件队列中,通过在事件派发线程(EDT)中运行, EventQueue对象在Swing中进行事件置入和派发。
二、图形渲染基础 • Swing绘制: 发起绘制请求途径:Swing或AWT库自身发起绘制求; 应用程序发起绘制请求。 发起绘制请求方法: 异步请求: Component.repaint() 它告诉Swing需要更新的内容,由Swing安排这 些请求细节,并适当地组合这些请求。 同步请求:JComponent.paintImmediately(), 该请求不会被 放在进行处理的事件队列中,而是程序直接处 理这个绘制请求并继续工作。
二、图形渲染基础 3. Swing渲染: Swing渲染模式以单线程绘制模式为中心,常用绘制方法有: JComponent.paintComponent(Graphics g) 和 Component.paint(Graphics g), 应用程序可重写这些方法,但重绘时并不需要显式的调用它们,重绘 请求由RepaintManager处理: RepaintManager调用这个组件的 paint() 或 paintComponent() ,然后顺序地渲染组件的内容,边界和 子组件。
二、图形渲染基础 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); }
二、图形渲染基础 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); }
二、图形渲染基础 • 线程: 当我们运行一个Swing应用程序时,会自动创建三个线 程:第一个是主线程,它运行应用程序的主方法; 第二个线程是工具包线程,它负责捕获系统事件, 它是AWT实现的一部分,从而不运行应用程序的代码; 第三个则是事件派发线程(EDT)。 然而考虑到Swing的单线程规则,我们在编写程序时应 避免在EDT中执行任何冗长的操作,以免导致EDT阻 塞。对此我们可参考下面的代码:
二、图形渲染基础 public void actionPerformed(ActionEvent e) { new Thread(new Runnable() { public void run() { final String text = readTimeText(); //简单操作 SwingUtilities.invokeLater(new Runnable() { public void run() { ……//要执行的代码 } }) } }).start(); }
三、动画原理 1、动画的基本思想: 是我们定义的对象(图形,图像等)如何随着时间进 行改变,并到达某一时间点时候适当的渲染这些对象。 2、基本概念: 基于帧的动画:动画的单独的视图称为一帧,而动画则 由一系列这样的帧组成。 帧频:这些帧显示的频率称为帧频。 定时:方式一:使线程睡眠一段时间: Thread.sleep(delay)
三、动画原理 方式二:定时器的使用:java.util.Timer 和 TimerTask timer = new Timer(); timer.schedule(new TimerTask() { public void run(){ …//要操作的方法 } }, delay); 加速和减速: 与默认恒速动画的突然启动和停止行为相比,加速和 减速的方式可以使动画感觉起来更加平滑。 这种方式可以通过自己编写代码设定帧频实现,也可
三、动画原理 以通过开源工具包实现。 Timing Framework工具库中Animator框架类提供了内插实现: Animator.setAcceleration (float a); Animator.setDeceleration (float d);
四、开发与应用 Offline-EastView实现
四、开发与应用 功能:该程序可按炮号同步显示实验视频,等离子体边界, IP电流信号。 应用平台:根据EASTIM通信系统的插件机制,可将该程序 嵌入到其中,扩展其功能。