`
msn877763580
  • 浏览: 83841 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

Java中三个与绘图有关的方法

阅读更多

Component 类下的三个与绘图有关的方法

public void paint(Graphics g)
Paints this component.
This method is called when the contents of the component should be painted; such as when the
component is first being shown or is damaged and in need of repair. The clip rectangle in the
Graphics parameter is set to the area which needs to be painted. Subclasses of Component that
override this method need not call super.paint(g).

public void update(Graphics g)
Updates this component.
If this component is not a lightweight component, the AWT calls the update method in response to
a call to repaint. You can assume that the background is not cleared.
The update method of Component calls this component's paint method to redraw this component.
This method is commonly overridden by subclasses which need to do additional work in response to a
call to repaint. Subclasses of Component that override this method should either call super.update(g),
or call paint(g) directly from their update method.

public void repaint()
Repaints this component.
If this component is a lightweight component, this method causes a call to this component's paint method as soon as
possible. Otherwise, this method causes a call to this component's update method as soon as possible.


http://hi.baidu.com/hxzon/item/56d27346ce148dd3c0a59264 写道

 

repaint()这个方法是一个具有刷新页面效果的方法,如果你要页面进行重画就可以调用.

从上面的流程图可以看出,在绘制动画图形时候如果没有调用repaint()方法的时候直接就是由线程调用paint()方法进行绘制,用 repaint()进行刷新显示.但是这样的动画会有个缺点(这样的效果绘制出来会有闪烁).想想做出来的动画总是隔一段时间就闪烁,有人会看吗?那么应 该怎么去除闪烁呢?我再下面的文章中会讲到.这里主要的是说明repaint()这个方法.

在调用了repaint()的时候我门可以看 出,它并不是直接就去绘制动画(调用paint()),而是通过调用AWT线程在由线程去调用另一个方法update()再由update()调用画笔 paint()方法进行绘制. 那么这里为什么要多做一步呢?这样是不是为我门多增加代码的书写量呢?回答是当然不会,如果你不调用repaint()那么 就不能实现每一次的刷新显示,就只会绘制重叠的图形,不能一张一张的绘制出来.那么其中调用的update()到底是起到什么样的作用呢?

update():清除当前显示并调用paint()方法.当然这个update()方法是可以被修改的.

综合上面的介绍可以总结出repaint()的工作原理:repaint()通过调用线程再由线程去调用update()方法清除当前显示并再调用paint()方法进行绘制下一个需要显示的内容.这样就起到了一种图片的交替显示从而在视角上形成了动画.

package cn.sisy.awt;

import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Canvas;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Panel;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class SimpleDraw {
	private final String RECT_SHAPE = "rect";
	private final String OVAL_SHAPE = "oval";
	private Frame f;
	private Button rect;
	private Button oval;
	private MyCanvas drawArea;
	private String shape = "";
	public void init(){
		f = new Frame("绘图测试");
		rect = new Button("矩形");
		oval = new Button("椭圆");
		drawArea = new MyCanvas();
		drawArea.setPreferredSize(new Dimension(250, 180));
		
		rect.addActionListener(new ActionListener() {		
			public void actionPerformed(ActionEvent arg0) {
				shape = RECT_SHAPE;
				drawArea.repaint();
			}
		});
		oval.addActionListener(new ActionListener() {		
			public void actionPerformed(ActionEvent arg0) {
				shape = OVAL_SHAPE;
				drawArea.repaint();
			}
		});
		
		Panel p =new Panel();
		p.add(rect);
		p.add(oval);
		
		f.add(drawArea);
		f.add(p , BorderLayout.SOUTH);
		f.pack();
		f.setVisible(true);
	}
	public static void main(String[] args) {
		new SimpleDraw().init();
	}
	class MyCanvas extends Canvas{
		@Override
		public void paint(Graphics g) {
			if(shape.equals(RECT_SHAPE)){
				Color c = new Color(220, 100, 80);
				g.setColor(c);
				g.drawRect(40, 60, 80, 100);
			}
			if(shape.equals(OVAL_SHAPE)){
				Color c = new Color(80, 100, 200);
				g.setColor(c);
				g.fillOval(70, 90, 50, 40);
			}
		}
	}
}

 

程序不应该主动调用组件的paint和update方法,这两个方法都由AWT系统负责调用,如果程序希望AWT系统重新绘制该组件,调用该组件的repaint方法即可。

 

 

  • 大小: 3.9 KB
  • 大小: 10.3 KB
分享到:
评论

相关推荐

    Java实用案例教程第6章Java绘图

    ### Java实用案例教程第6章Java绘图 #### 教学目标 - 掌握字体设置的相关知识与...在实际开发过程中,还可以进一步探索更多高级特性,如使用`BufferedImage`来提高绘图性能,或是利用第三方库扩展Java的绘图能力。

    Java绘图.ppt

    在Java中,绘图主要依赖于Java2D API,这是一个强大的图形处理框架,提供了大量的类和方法来实现复杂的图形绘制。 首先,我们要了解Java绘图的基本元素。Java中的绘图基于坐标系统,这个系统定义了X和Y轴,X轴从左...

    Java下的绘图板程序

    在Java编程环境中,开发一个绘图板程序是一项有趣且实用的任务。这个名为"Java下的绘图板程序"的项目提供了一个交互式的平台,允许用户绘制各种形状,输入文字,并能够以常见的图像格式如PNG、JPG和BMP保存他们的...

    java绘图方面的源码

    Java绘图技术是Java开发中的一个重要领域,它允许开发者创建丰富的图形用户界面(GUI)和进行复杂的图形操作。在Java中,绘图主要通过Java AWT(Abstract Window Toolkit)和Swing库来实现。EJB(Enterprise ...

    用java写的绘图组件

    这两个库提供了多种绘图类和方法,使得开发人员能够创建出复杂的图形、图表以及可视化应用。 首先,我们来看Java AWT。AWT是Java早期的图形用户界面(GUI)库,它依赖于操作系统提供的原生窗口系统。AWT中的`...

    Java GUI 绘制出三角形

    `paintComponent()`方法用于绘制三角形,我们定义了三个点来表示三角形的顶点,然后创建了一个`Polygon`对象。最后,我们设置了绘图颜色并调用`drawPolygon()`方法来绘制三角形。 在`main()`方法中,我们创建了一个...

    java简易绘图程序

    在本实验中,我们将深入探讨如何使用Java语言创建一个简易的绘图程序。这个程序将允许用户通过编程的方式来绘制各种图形,从而理解Java图形处理的基本原理和方法。实验十三的主题是"Java语言程序设计——绘图实践",...

    java语言写的关于绘图的程序

    - `JToggleButton[] button = new JToggleButton[3]`:数组用来存放三个图形选择按钮。 - `PainterPanel painter = new PainterPanel()`:实例化 `PainterPanel` 类的对象,作为绘图区域。 3. **构造函数**: - ...

    Java绘图依赖包java_3D

    Java 3D是Java平台上的一个高级图形渲染库,它为开发者提供了在应用程序中创建、操纵和显示三维图形的能力。这个“java3d-1_5_1-windows-amd64”压缩包很可能是Java 3D库的1.5.1版本,专为Windows操作系统下的AMD64...

    Matlab与java接口(图文并茂)

    Matlab与Java接口技术是实现两者间高效交互的重要途径,它允许我们在Matlab环境中利用Java的强大功能,同时也能让Java程序调用Matlab的功能,实现数据处理和计算任务的无缝对接。本文将详细阐述配置要求、环境配置、...

    java中画带箭头的线

    4. 绘制箭头:使用`g.fillPolygon()`方法,传入三个点的坐标(线段末端、箭头的两个顶点)来绘制三角形。 例如,以下代码展示了如何在Java Swing中创建一个简单的带箭头的线: ```java import javax.swing.JFrame;...

    Java_2D高级绘图

    首先,Java 2D API 是Sun公司与Adobe系统公司合作开发的,它扩展了AWT(Abstract Windowing Toolkit)中的Graphics类和Image类,为开发者提供了强大的图形处理能力。Java 2D API的引入弥补了AWT早期版本在图形绘制、...

    java绘图程序(CAD)3

    Java绘图程序(CAD)3是一个基于Java编程语言开发的计算机辅助设计(CAD)系统,它专注于提供基础的图形绘制和编辑功能。CAD系统在工程、建筑、设计等多个领域广泛应用,帮助用户创建、修改和分析二维或三维模型。在本...

    Java 2D高级绘图

    在 Java 2D 中,与环境的交互是一个重要方面,这涉及到如何与操作系统进行通信以及如何管理屏幕设备。本节将介绍以下几个关键类: - **GraphicsEnvironment 类**:提供有关可用图形设备的信息。 - **GraphicsDevice...

    java 画图软件_java_

    在这个特定的场景中,"java 画图软件_java_" 提供了一个利用Java进行图形绘制的应用实例。这个软件模仿了CAD(计算机辅助设计)软件的功能,允许用户创建基本几何形状,如三角形、正方形、长方形和菱形。 在Java中...

    西南科技大学Java程序设计与实践 实验三 类的继承与多态的应用

    本次实验主要目的是深化理解和应用Java中的类的继承与多态特性,同时结合图形用户界面设计进行实战训练。实验内容分为三个部分,旨在通过具体的编程任务来巩固面向对象编程的基本概念。 实验的第一个任务是利用多态...

    一个java画图软件

    在Java中,Graphics类是进行图形绘制的核心,它提供了各种方法,如drawLine(), drawRect(), fillCircle()等,用于在组件上绘制基本形状。开发者可以通过继承JPanel或JComponent类,重写paintComponent()方法,然后在...

    java试卷及答案

    7 java图形类中不但提供了一些绘图方法 还可以装载 jpeg 和 gif 两种格式的图形文件 在APPLET程序中显示一图片文件需用到 getImage 和 drawImage 方法 8 java中 例外可以分为三大类: Error Exception ...

    java的Applet三子棋游戏

    2. **游戏规则**:玩家轮流在空格上下棋,先形成连续三个棋子的直线(横、竖、斜)者获胜。 3. **游戏状态检查**:每次下棋后,检查是否有玩家满足胜利条件,若有则宣布胜者,游戏结束。 4. **平局判断**:所有格子...

    求两圆是否相交 java

    在这个测试类中,我们创建了三个`Circle`对象,并分别检查了`circle1`与其他两个圆的相交情况。运行这个程序,根据输出结果可以判断两圆是否相交。 总结一下,判断两圆是否相交的关键在于计算两圆心之间的距离并将...

Global site tag (gtag.js) - Google Analytics