📄 sortinginfoanimator.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 + -