`

画图板的进一步————重绘

 
阅读更多

 

      下面是用数组对画板上的图形进行存储

 

package 画板的重绘;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Graphics;

import javax.swing.JPanel;



/**
 * 画图区域面板的实现类,该类继承自JPanel类
 * 
 * @author Administrator
 * 
 */
public class DrawingPanel extends JPanel {
	/**
	 * 构造方法
	 */
	public DrawingPanel() {
		init();// 调用初始化面板的方法
	}

	// 实例化一个JPanel类的对象属性,用来获取画布
	private JPanel panel = new JPanel(){
		//方法重写
		public void paint(Graphics g){	   	   
			  super.paint(g);
			if(DrawingListener.a==false){
			  for(int i=0;i < array.length;i++){
				  for(int j =0;j<array[i].length;j++){
					  Color color = new Color(array[i][j]);
					  g.setColor(color);
					  g.drawLine(i, j, i, j);
					  }
				  }
			  }  
		}
			
	};
	//定义一个存画板上像素点的二维数组
	public static int [][]array = new int [400][300];

	/**
	 * 获取JPanel对象
	 */
	public JPanel getJPanel() {
		 
		return panel;
	}
    

	private void init() {
		// 设置DrawingPanel的布局为流式布局布局
		this.setLayout(new FlowLayout(FlowLayout.LEFT));
		this.setBackground(Color.LIGHT_GRAY);

		panel.setBackground(Color.WHITE);
		panel.setPreferredSize(new Dimension(400, 300));
		// 将panel添加到DrawingPanel上
		this.add(panel);
		
	}	
	 
}		

 数组列表

 

/**
 * 数组队列
 * 
 
 */
public class MyArrayList<E> {

	private Object[] array;// 属性数组
	private int size = 0;// 记录元素总数的属性

	/**
	 * 构造方法
	 */
	public MyArrayList() {
		array = new Object[0];// 实例化一个数组
	}

	/**
	 * 构造方法
	 * 
	 * @param length表示数组队列的长度
	 */
	public MyArrayList(int length) {
		array = new Object[length];// 实例化一个数组
	}

	/**
	 * 定义添加元素的方法
	 * 
	 * @param e要添加到数组队列中的元素
	 */
	public void add(E e) {
		// 实例化一个新数组,长度是size+1
		Object[] newarray = new Object[size + 1];
		// 将array数组的内容添加到newarray数组中
		for (int i = 0; i < size; i++) {
			newarray[i] = array[i];
		}
		// 将新元素添加到newarray数组的最后一个位置
		newarray[size] = e;
		// size要加1
		size++;
		// 将newarray数组名中存储的地址赋给array
		array = newarray;
	}

	/**
	 * 定义删除指定索引位置元素的方法
	 * 
	 * @param index要被删除的元素下标
	 * @return 返回删除是否成功 ,如果返回true表示删除成功,返回false表示删除失败
	 */
	public boolean remove(int index) {
		if (index >= 0 && index < size) {
			// 实例化一个新数组,长度是size-1
			Object[] newarray = new Object[size - 1];
			// 将array数组的内容添加到newarray数组中
			for (int i = 0; i < index; i++) {
				newarray[i] = array[i];
			}
			for (int i = index+1; i < size; i++) {
				newarray[i-1] = array[i];
			}
			// size要减1
			size--;
			// 将newarray数组名中存储的地址赋给array
			array = newarray;
			return true;
		}
		return false;
	}
	
	/**
	 * 获取数组队列的元素总数
	 * @return 返回size属性值
	 */
	public int size(){
		return size;
	}
	/**
	 * 获取指定索引位置的元素
	 * @param index索引位置
	 * @return 如果返回null,则表示索引位置不存在;如果存在则返回对应的元素
	 */
	public E get(int index){
		if(index >= 0 && index < size){
			return (E)array[index];
		}
		return null;
	}
}

 

 

 

 

 

分享到:
评论

相关推荐

    基于VC++MFC程序设计——简易画图板

    ### 基于VC++MFC程序设计——简易画图板 #### 概述 本文档将详细介绍如何利用VC++中的MFC(Microsoft Foundation Classes)框架来开发一款简易的画图板应用程序。该画图板的主要功能包括但不限于图形的绘制、线型...

    简易画图板

    这种方式避免了频繁的屏幕重绘,提升了用户体验,尤其是在进行复杂图形操作或大量元素更新时。 此外,我们可以推测【简易画图板】可能包含以下基本功能: 1. **选择工具**:允许用户选择和移动已画图形。 2. **画笔...

    原创java写的画图板软件(代码风格良好)

    当用户进行绘图操作时,为了实时显示更改,需要调用`repaint()`方法来通知系统重绘组件。`repaint()`会触发`paintComponent()`的调用,从而显示最新的绘图内容。 5. 设计模式与代码组织 良好的代码风格体现在模块...

    MFC——超级画板

    在MFC画图板的实现中,可能会涉及重绘区域的优化,通过只更新实际变化的部分,而不是整个窗口,可以大大提高性能。 综上所述,"MFC——超级画板"是一个包含高级绘图特性的应用程序,通过深入理解MFC的绘图机制和...

    信息技术教案——画图.pdf

    信息技术教案——画图.pdf 本教程旨在教授学生如何使用计算机内置的“画图”程序进行基本的绘图操作。教学目标分为两部分:首先,掌握启动与退出“画图”程序的方法;其次,初步了解“画图”程序的功能及其窗口组成...

    用qt写的画图工具

    同时,关注性能优化,比如减少不必要的重绘,使用智能指针管理内存,避免内存泄漏。 9. **构建和部署** 编译并运行你的项目,确保在所有目标平台上都能正常工作。如果需要,可以打包应用程序,发布给其他人使用。 ...

    Java典型模块

    13.3 知识点扩展——画图的基础知识 13.3.1 画图的基础知识 13.3.2 各种类型对象的绘制 13.4 小结 第14章 指针时钟项目(Swing组件+时间算法) 14.1 指针时钟原理 14.1.1 项目结构框架分析 14.1.2 项目功能业务分析 ...

    sketchpad:使用 JQuery 制作的简单画板

    8. **优化与性能**:为了提高性能,可以考虑在不绘制时禁用画布的重绘,使用`context.save()`和`context.restore()`保存和恢复状态,或者在必要时才更新画布的一部分(局部重绘)。 通过以上技术,我们可以构建出一...

    精通JBuilder9.pdf

    4. **操作管理**:用户可以按绘制顺序删除或重绘图形元素。 5. **文件保存与加载**:支持将绘制的图形保存为文件,并能在打开文件后继续编辑。 6. **可扩展性**:确保程序在未来可以轻松扩展新的绘图元素。 为了...

    HTML5 Canvas学习笔记(8)俄罗斯方块游戏之二(方块)

    它会在浏览器下一次重绘之前调用提供的回调函数,适合用来创建连续的视觉效果。 - 通过不断更新方块的位置并重绘Canvas,可以模拟出方块下落的动画。 6. **源码和工具**: - 博文链接提供了具体的实现代码,可以...

    java课程设计报告++画笔程序.doc

    - paint(Graphics g)方法:用于重绘组件,展示图形。 - itemStateChanged(ItemEvent e)方法:处理工具栏组件的选择变化。 - mouseDragged(MouseEvent e)、mousePressed(MouseEvent e)、mouseReleased(MouseEvent ...

    易语言画板列表框模块-易语言

    5. 性能优化:采用合适的数据结构和算法,减少不必要的计算和重绘,提高程序运行效率。 6. 销毁清理:在程序退出或模块卸载时,释放资源,避免内存泄漏。 通过以上分析,我们可以看出,易语言画板列表框模块是...

    Android小游戏太空保卫战_安卓源码.zip

    这里会实现游戏循环(GameLoop),即不断地更新游戏状态并重绘屏幕。游戏逻辑如物体移动、碰撞检测、得分计算等都包含在这个类中。 3. 游戏对象(如Player、Enemy、Bullet):这些类代表游戏中的实体,每个对象有...

    paintjs:用VanilaJS制成的绘画板

    今天我们将深入探讨一个基于VanillaJS(即纯JavaScript)的项目——PaintJS,这是一个用于创建在线绘画板的开源工具,它为用户提供了丰富的画图体验,无需依赖任何外部库。 首先,我们来理解一下什么是VanillaJS。...

Global site tag (gtag.js) - Google Analytics