⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sortinginfoanimator.java

📁 用JAVA实现排序等简单算法的演示
💻 JAVA
字号:
package sortingAnimation;

import java.awt.Color;
import java.awt.Graphics;

import graphicAnimation.Animator;

/**
 * 用于展示排序时的一些信息,例如排序时间,比较、移动、选择和交换次数等信息的演示器
 * @author 周晓聪
 * @since 2007/8/1
 *
 */
public class SortingInfoAnimator extends Animator {
	// 选择在演示时用的一些颜色值
	protected Color dataColor = null;
	protected Color compareColor = null;
	protected Color swapColor = null;
	protected Color selectColor = null;

	// 各种计数器,用来动态显示排序过程中已经交换、比较、选择和移动的次数
	protected int compareCounter = 0;
	protected int swapCounter = 0;
	protected int selectCounter = 0;
	protected int moveCounter = 0;
	// 用于计算演示排序所使用的时间
	long time = 0;										
	long startTime = 0;					 				

	/**
	 * 设置展示排序算法时所用的各种颜色
	 * @param dColor 正常颜色,即数据正常显示的颜色
	 * @param cColor 标志元素正在比较时所使用的颜色
	 * @param sColor 标志元素正在交换时所使用的颜色
	 * @param lColor 标志元素正被选中时所使用的颜色
	 */
	public void setSortingColor(Color dColor, Color cColor, Color sColor, Color lColor) {
		dataColor = dColor;
		compareColor = cColor;
		swapColor = sColor;
		selectColor = lColor;
	}
	
	/**
	 * 清除计算比较、选择、交换和移动次数的计数器
	 *
	 */
	public void clearCounter() {
		compareCounter = 0;
		swapCounter = 0;
		selectCounter = 0;
		moveCounter = 0;
		update();
	}
	
	/**
	 * 增加记录比较次数的计数器
	 */
	public void incCompareCounter() {
		compareCounter++;
		update();
	}

	/**
	 * 增加记录比较次数的计数器
	 */
	public void incCompareCounter(int num) {
		compareCounter += num;
		update();
	}
	
	/**
	 * 增加记录交换次数的计数器
	 */
	public void incSwapCounter() {
		swapCounter++;
		update();
	}

	/**
	 * 增加记录交换次数的计数器
	 */
	public void incSwapCounter(int num) {
		swapCounter += num;
		update();
	}

	/**
	 * 增加记录选择次数的计数器
	 */
	public void incSelectCounter() {
		selectCounter++;
		update();
	}

	/**
	 * 增加记录选择次数的计数器
	 */
	public void incSelectCounter(int num) {
		selectCounter += num;
		update();
	}

	/**
	 * 增加记录移动次数的计数器
	 */
	public void incMoveCounter() {
		moveCounter++;
		update();
	}
	
	/**
	 * 增加记录移动次数的计数器
	 */
	public void incMoveCounter(int num) {
		moveCounter += num;
		update();
	}

	/** 
	 * 设置排序开始的时间,以便计算整个排序所使用的时间,当然该时间只是供参考,因为不同的
	 * 的演示方法会影响排序的时间
	 *
	 */
	public void setStartTime() {
		startTime = System.currentTimeMillis();
		time = 0;
		update();
	}
	
	/** 
	 * 设置排序开始的时间,从而计算整个排序所使用的时间,当然该时间只是供参考,因为不同的
	 * 的演示方法会影响排序的时间
	 *
	 */
	public void setEndTime() {
		time = System.currentTimeMillis() - startTime;
		update();
	}
	
	/**
	 * 在演示区域绘制各种提示信息
	 */
	public void paint(Graphics gc) {
		if (!visible) return;
		
		// 在图形区域上方现实矩形条以各种颜色显示时所代表的含义
		gc.setColor(dataColor);
		gc.fillRect(50, 8, 50, 20);
		gc.setColor(Color.white);
		gc.drawString(time+"", 52, 20);
		gc.setColor(Color.black);
		gc.drawString("Normal(Time)", 108, 20);

		gc.setColor(compareColor);
		gc.fillRect(250, 8, 50, 20);
		gc.setColor(Color.white);
		gc.drawString(compareCounter+"", 252, 20);
		gc.setColor(Color.black);
		gc.drawString("Comparing", 308, 20);

		gc.setColor(swapColor);
		gc.fillRect(450, 8, 50, 20);
		gc.setColor(Color.white);
		gc.drawString(swapCounter+"", 452, 20);
		gc.setColor(Color.black);
		gc.drawString("Swapping", 508, 20);

		gc.setColor(selectColor);
		gc.fillRect(650, 8, 50, 20);
		gc.setColor(Color.white);
		gc.drawString(selectCounter+"", 652, 20);
		gc.setColor(Color.black);
		gc.drawString("Selected", 708, 20);

		gc.setColor(dataColor);
		gc.fillRect(850, 8, 50, 20);
		gc.setColor(Color.white);
		gc.drawString(moveCounter+"", 852, 20);
		gc.setColor(Color.black);
		gc.drawString("Move", 908, 20);
	}

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -