📄 mergesortinganimationpainter.java
字号:
package sortingAnimation;
import graphicAnimation.*;
import java.awt.*;
import javax.swing.*;
import animationController.AnimationController;
public class MergeSortingAnimationPainter extends SortingAnimationPainter {
private MergeSortingAnimator mergeAnimator = null; // 当选择合并排序时使用的演示器
public MergeSortingAnimationPainter(JComponent parent, JComponent[] toBlock, AnimationController controller) {
super(parent, toBlock, controller);
}
protected void createAnimator() {
// 创建演示合并排序时所使用的演示器
mergeAnimator = new MergeSortingAnimator(animationDriver);
mergeAnimator.setStepDelay(localController.stepDelay);
mergeAnimator.setUnitMoving(4*localController.unitMoving);
mergeAnimator.setSortingColor(localController.dataColor, localController.compareColor, localController.swapColor, localController.selectColor);
mainAreaAnimator = mergeAnimator;
smallAreaAnimator = null;
// 创建提示排序时间、比较次数、移动次数、交换次数、选择次数等信息的演示器
infoAnimator = new SortingInfoAnimator();
infoAnimator.setSortingColor(localController.dataColor, localController.compareColor, localController.swapColor, localController.selectColor);
infoAnimator.setStartTime();
}
protected void connectAnimatorAndArea() {
// 信息演示区域的演示器是infoAnimator,其他演示区域的演示器待定,因为当排序元素很多时不使用小区域的演
// 示器,因此这里也暂时没有设置小区域的演示器为 boxAnimator
infoArea.setAnimator(infoAnimator);
// 设置各演示器所分别使用的演示区域,不过同一时刻某个演示区域只有一个演示器使用,在选定要演示的排序算
// 法的同时,我们也会确定到底使用怎样的演示器
infoAnimator.setAnimationArea(infoArea);
mergeAnimator.setAnimationArea(mainArea);
}
/**
* 使用数组 data 创建演示用的最初的视图
*/
public void createAnimationView(int[] data) {
// 这时总有 mainAreaAnimator == mergeAnimator
mainArea.setAnimator(mergeAnimator);
mergeAnimator.createRectAnimationScene(data, new Point(localController.startX, localController.mainStartY), localController.elementWidth-localController.spacingWidth, localController.spacingWidth, AnimationView.darkGreen, localController.unitHeight, localController.showValue);
mergeAnimator.createMergeAnimatorScene(data, new Point(localController.startX, localController.mainMiddleY), localController.elementWidth, 0, Color.white);
Animator.sleep(localController.stepDelay);
}
/**
* 使用动画展示合并排序时,将startIndex(包括) 到 endIndex(包括)处的元素从合并用的临时数组拷贝回待排序数组
*/
public void showCopyMergeDataScene(int startIndex, int endIndex) {
infoAnimator.incMoveCounter(endIndex - startIndex + 1);
mergeAnimator.showCopyMergeDataScene(startIndex, endIndex);
}
/**
* 使用动画展示合并排序时,将待排序数组中 dataIndex 处的元素拷贝到合并用的临时数组的 mergeIndex 处
*/
public void showCopyDataScene(int mergeIndex, int dataIndex) {
infoAnimator.incMoveCounter();
mergeAnimator.showCopyDataScene(mergeIndex, dataIndex);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -