Java Swing 是 Java 的一个图形用户界面(GUI)工具包,它允许开发者创建桌面应用程序。在 Swing 中,可以通过重绘组件来实现动画效果。动画排序算法通常指的是在排序过程中通过视觉反馈展示排序步骤的算法,例如冒泡排序、快速排序等。
常见的动画排序算法包括:
以下是一个简单的冒泡排序动画示例,使用 Java Swing 实现:
import javax.swing.*;
import java.awt.*;
import java.util.Arrays;
public class BubbleSortAnimation extends JFrame {
private int[] array;
private int[] tempArray;
private int index1 = -1;
private int index2 = -1;
private boolean sorted = false;
public BubbleSortAnimation(int[] array) {
this.array = array;
this.tempArray = Arrays.copyOf(array, array.length);
setTitle("Bubble Sort Animation");
setSize(800, 600);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}
@Override
public void paint(Graphics g) {
super.paint(g);
Graphics2D g2d = (Graphics2D) g;
int width = getWidth();
int height = getHeight();
int barWidth = width / array.length;
for (int i = 0; i < array.length; i++) {
int barHeight = (int) ((double) array[i] / getMaxValue() * height);
if (i == index1 || i == index2) {
g2d.setColor(Color.RED);
} else {
g2d.setColor(Color.BLUE);
}
g2d.fillRect(i * barWidth, height - barHeight, barWidth, barHeight);
}
}
private int getMaxValue() {
int max = Integer.MIN_VALUE;
for (int value : array) {
if (value > max) {
max = value;
}
}
return max;
}
public void startSorting() {
Thread sortingThread = new Thread(() -> {
for (int i = 0; i < array.length - 1 && !sorted; i++) {
for (int j = 0; j < array.length - 1 - i; j++) {
index1 = j;
index2 = j + 1;
if (array[j] > array[j + 1]) {
swap(j, j + 1);
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
repaint();
}
}
}
sorted = true;
});
sortingThread.start();
}
private void swap(int i, int j) {
int temp = array[i];
array[i] = array[j];
array[j] = temp;
}
public static void main(String[] args) {
int[] array = {5, 3, 8, 4, 2};
BubbleSortAnimation bsa = new BubbleSortAnimation(array);
bsa.startSorting();
}
}
SwingWorker
或 ExecutorService
来管理后台线程。通过以上步骤和示例代码,你可以实现一个简单的冒泡排序动画。根据需要,可以扩展到其他排序算法,并进一步优化和美化界面。
领取专属 10元无门槛券
手把手带您无忧上云