`
代码小达人
  • 浏览: 24472 次
  • 性别: Icon_minigender_2
  • 来自: 杭州
社区版块
存档分类
最新评论

java两种重绘方式的比较

阅读更多
两种重绘方式的比较
重绘,顾名思义,就是重新绘画的意思,因为画上去的图案在计算机刷新后就没有了,因为没有存到内存中,所以,我们要进行重绘,将画过的内容保存起来。
保存的方法有2种,一种是利用队列,将画过的图像均保存起来,这种保存方式适用于较简单的图案或者进行了较简单的操作。这种方法,首先要创建一个队列,或者用系统自带的队列,然后,创建一个抽象类,其中创建一个抽象的方法,然后让所有的各种类都去继承这个抽象类,完成抽象类中draw的方法。
抽象类代码:

public abstract class Shape {
	public int x1,x2,y1,y2;
	public Color color;
	public Graphics g;
	public Shape(int x1,int x2,int y1,int y2,Color color,Graphics g){
		this.x1=x1;
		this.x2=x2;
		this.y1=y1;
		this.y2=y2;
		this.color=color;
		this.g=g;
		
	}
	public abstract void draw(Graphics g);
	}

因为所有要保存的图形均为5要素,即起始点坐标,释放点坐标以及所需绘制的颜色。让所有的不同类型的子类来完成draw这个抽象方法即可。然后在监听器里创建一个所需画的图形的类,并将它转换为父类类型,即shape。然后再调用其自己的方法,绘制图形,最后将这个类加入队列。在主类里,对于画布,没刷新一次会调用画布内的paint方法。
class MyPanel extends JPanel {
		public void paint(Graphics g) {
			super.paint(g);//继承它本身所拥有的方法,否则会画不出来
			for (int i = 0; i < Q.size(); i++) {
				Shape shape = (Shape) Q.get(i);
				shape.draw(g);
			}
		}

在继承以后,在加入我们队列中所保存的类,一个个的输出,最后就将刚刚保存在队列里的内容全部输出,即完成了重绘。
   第二种重绘方法是保存画布上的像素点,该方法适用于图案较复杂,或者较复杂的操作。该方法用到Robot的方法,createScreenCapture(Rectangle screenRect),此方法将一幅图像保存下来,返回值为BufferedImage,我们再到、用BufferedImage的方法上上获取我们所需绘制的颜色,该方法同样的需要用到队列,将像素点的颜色一点一点的保存到队列里面。此颜色可以用一个int型来保存,因为图像的颜色可以用RGB加上一个透明度来表示,而且范围均属0-255的,因此,刚好是4个字节,恰为一个整形可以表示。另外,当画布颜色为发生改变时,我们可以跳过该像素点,即提高了保存的效率。
分享到:
评论

相关推荐

    JAVA UDP协议实现绘圆同步

    Java UDP协议实现绘圆同步是一种基于用户数据报协议(UDP)的简单通信方式,用于在客户端和服务端之间实时同步绘制图形。在这个例子中,我们有两个关键类:`DrawServer` 和 `DrawClient`。 `DrawServer` 类是服务器...

    android 两种圆形头像的实现方式 CircleImageView java

    创建一个新的Java类,继承自`ImageView`,并在`onDraw()`方法中重绘图像。以下是一个简单的示例: ```java public class CircleImageView extends AppCompatImageView { public CircleImageView(Context ...

    java源码包---java 源码 大量 实例

    两个目标文件,自绘button。 Java圆形电子时钟源代码 1个目标文件 内容索引:JAVA源码,系统相关,电子钟  用JAVA编写的指针式圆形电子钟,效果图如下所示,其实代码很简单,希望对你有帮助。 Message-Driven Bean ...

    java绘图代码

    为了实现图表的动态显示,即条形图和饼图之间的交替展示,程序使用了一个布尔变量`flag`来切换两种图表的绘制状态。每次重绘时,都会根据`flag`的值选择绘制条形图还是饼图,并通过`Timer`定时器触发界面的重绘操作...

    Java画图板应用

    为了提供类似Windows画图板的橡皮擦功能,Java画图板应用可能实现了两种模式:一种是使用特定的橡皮擦工具,另一种是将画笔颜色设置为背景色,从而达到擦除的效果。此外,添加形状绘制功能,如矩形、圆形和多边形,...

    java源码包3

    两个目标文件,自绘button。 Java圆形电子时钟源代码 1个目标文件 内容索引:JAVA源码,系统相关,电子钟  用JAVA编写的指针式圆形电子钟,效果图如下所示,其实代码很简单,希望对你有帮助。 Message-Driven ...

    java练习题大全

    13. Java Applet的生命周期中,paint()方法是用于绘制Applet图形界面的,这个方法在Applet需要重绘的时候被调用。 14. 在Java中,不是所有的访问控制符都可以用于类和类成员。例如,static不是访问控制符,它用于...

    java源码包2

    两个目标文件,自绘button。 Java圆形电子时钟源代码 1个目标文件 内容索引:JAVA源码,系统相关,电子钟  用JAVA编写的指针式圆形电子钟,效果图如下所示,其实代码很简单,希望对你有帮助。 Message-Driven ...

    Java 图形与动画编程实例(PDG)

    1. **Java AWT和Swing**: Java标准版(Java SE)提供了两种主要的GUI(图形用户界面)框架——Abstract Window Toolkit (AWT) 和 Swing。AWT是早期的图形库,依赖于操作系统的原生组件,而Swing是建立在AWT之上的轻...

    JAVA 程序 源代码 import java.applet.*;import java.awt.*

    在给定的描述中,没有更多的具体信息,所以我们将基于这两个导入语句来探讨相关的Java知识点。 1. **Java Applet**: `java.applet.*` 指的是Java Applet API,这是一个早期Java技术,主要用于创建可以在Web浏览器中...

    又一个简单的java applet图像移动重画实例

    在本例中,图像的位置会在每次定时器触发时更新,然后通过`repaint()`请求浏览器重绘Applet,从而实现图像的动态移动效果。 为了在Applet中加载和显示图像,我们需要使用`Image`类。我们可以使用`Toolkit`类的`...

    java(applet小动画)

    Java Applet是Java技术在早期Web开发中用于创建交互式客户端小应用程序的一种方式。它允许开发者将动态内容嵌入到HTML网页中,提供丰富的用户体验。本项目是一个基于Applet实现的龟兔赛跑动画,利用多线程的概念,...

    java开源包6

    parboiled 是一个纯Java库提供了一种轻量级,易于使用,功能强大和优雅的PEG(解析表达式语法)分析设施。你定义的Java源代码的语法规则,直接,没有必要专门编写和维护,外部语法文件。同时保持蒸提供全面的支持,...

    java开源包9

    parboiled 是一个纯Java库提供了一种轻量级,易于使用,功能强大和优雅的PEG(解析表达式语法)分析设施。你定义的Java源代码的语法规则,直接,没有必要专门编写和维护,外部语法文件。同时保持蒸提供全面的支持,...

    Java 贪吃蛇小游戏

    Java提供了两种主要的GUI库:Swing和AWT。在这个贪吃蛇游戏中,可能使用了AWT库,因为它更底层,可以直接操作像素。Canvas是AWT中的一个关键组件,它是可绘图区域,允许程序员自定义绘图逻辑。 2. **Java画布...

    java漫天闪烁星星

    每次窗体需要重绘时,都会调用这个方法,因此可以通过定时器每隔一定时间更新星星的位置,从而创造出下落的视觉效果。 至于闪烁,通常会结合颜色变化来实现。开发者可能为每个星星定义了一个颜色变量,然后在定时器...

    java开源包101

    parboiled 是一个纯Java库提供了一种轻量级,易于使用,功能强大和优雅的PEG(解析表达式语法)分析设施。你定义的Java源代码的语法规则,直接,没有必要专门编写和维护,外部语法文件。同时保持蒸提供全面的支持,...

    java 漂浮效果的资源

    在Java编程语言中,"漂浮效果"通常指的是在用户界面上实现的一种动态视觉效果,例如物体或图像在屏幕上以不规则的方式移动,仿佛在空中漂浮。这种效果可以增加应用的互动性和趣味性,常见于游戏开发或者GUI界面的...

    java开源包4

    parboiled 是一个纯Java库提供了一种轻量级,易于使用,功能强大和优雅的PEG(解析表达式语法)分析设施。你定义的Java源代码的语法规则,直接,没有必要专门编写和维护,外部语法文件。同时保持蒸提供全面的支持,...

    Java 实现简单的动画

    总之,Java实现简单的动画需要对Java GUI编程有基本的理解,熟练掌握`Graphics`类的使用,以及如何利用`Timer`和重绘机制来实现动态效果。对于初学者来说,这是一个很好的实践项目,可以加深对Java编程和面向对象...

Global site tag (gtag.js) - Google Analytics