我正在进行一项名为“图形排序”的作业,它基本上是以图形方式制作排序算法。
我只需要帮助设置分类过程的动画。
我尝试使用Thread,但程序会挂起,直到线程处理完成,然后显示最终结果。
以下是我的计划的样子:
下面是我用来绘画的面板类
import javax.swing.*;
import java.awt.*;
import java.util.*;
public class PaintPanel extends JPanel
{
// Create an array of 34 element size
int[] Arr = new int [34];
// Set default X pointer to 20
int x = 50;
// Declare Y pointer to 660
int y = 660;
// Set the length of array to n variable
int n = Arr.length;
/*
* main method
* @param none
* @return none
*/
public PaintPanel ()
{
randomNums ();
}
/*
* Generates random numbers between 50 and 750 and stores it into the Arr variable
* @param none
* @return none
*/
public void randomNums ()
{
// call randomGenerator object
Random randomGenerator = new Random ();
// Loop 33 times = Generates 33 random integers
for (int i = 0 ; i <= 33 ; ++i)
{
// Generate random Number
int randomInt = randomGenerator.nextInt (700);
// Conditional statement, if any number is less than 50, then discard it and generate new number
if (randomInt > 50)
// Assign each random number into Arr Element
Arr [i] = randomInt;
else
{
// Regenerate Random Number
randomInt = randomGenerator.nextInt (700);
// Assign it again
Arr [i] = randomInt;
}
}
}
/*
* Bubble Sort Algorithm
* @param none
* @return none
*/
public void bubble ()
{ //Pre: a is an array with values. It is of size n
//Post: the values in a are put in ascending order
int temp;
int a[] = Arr;
for (int i = 0 ; i < n - 1 ; i++)
{
for (int j = 0 ; j < n - 1 - i ; j++)
{ // compare the two neighbours
if (a [j + 1] < a [j])
{ //swap the neighbours if necessary
temp = a [j];
a [j] = a [j + 1];
a [j + 1] = temp;
}
}
}
}
/*
* Paints 33 rectangle Strips to the screen
* @param Graphics g
* @return none
*/
public void paintComponent (Graphics g)
{
super.paintComponent (g);
// Call Graphics2D Object
Graphics2D g2 = (Graphics2D) g.create ();
// Create Paint Object with gradient Fill
Paint p = new GradientPaint (
0, 0, new Color (0x44A2FF),
getWidth (), 0, new Color (0x0CBEAE),
true
);
// Set the gradient fill to the Graphics2D Object
g2.setPaint (p);
// Loop through the Array and display series of Rectangular Strips
for (int i = 0 ; i < Arr.length ; ++i)
{
// Fill out the Rectangle
g2.fillRect (x, y, Arr [i], 8);
y = y - 15;
}
g2.dispose ();
}
}
我应该使用什么来为流程制作动画。我还想显示在排序过程中正在比较哪些矩形条。
谢谢
答案 0 :(得分:2)
当我编写类似的程序时,我使用两种方法创建了SortListener
接口:onCompare()
和onSwap()
。我使用onCompare()
来高亮显示与不同颜色进行比较的两个元素,并使用onSwap()
通知GUI重新绘制istelf。
我还创建了一个'SortingAlgorithm'抽象类和几个特定排序算法的子类。超类定义addSortListener()
以允许其他类注册侦听器。然后在排序算法中,我在比较后立即调用onCompare()
,并在交换两个元素后立即调用onSwap()
。
最后,我做绘画的JPanel实现了SortListener
界面,并通过重新绘制动画来回复onCompare()
和onSwap()
。