Я пытаюсь создать программу, которая будет визуализировать различные алгоритмы сортировки, рисуя набор столбцов, представляющих массив, для каждого цикла сортировки. Однако, когда я устанавливаю массив из класса сортировщика, который, в свою очередь, перерисовывает панель, кажется, что он вызывает только paintComponent() для первой и последней итераций, не показывая шаги между ними.Перекрашивание JPanel в петле с задержкой
Вот своего рода код, который вызывает метод setNumberArray():
public void bubbleSort() {
int[] x = getNumberArray();
boolean doMore = true;
while (doMore) {
doMore = false;
for (int count = 0; count < x.length - 1; count++) {
if (x[count] > x[count+1]) {
int temp = x[count]; x[count] = x[count+1]; x[count+1] = temp;
doMore = true;
}
}
// Update the array
SorterGUI.getSorterPanel().setNumberArray(x);
// Pause
try {
Thread.sleep(500);
} catch (InterruptedException ex) {
Logger.getLogger(Sorter.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
Какие вызовы:
public void setNumberArray(int[] numberArray) {
this.numberArray = numberArray;
repaint();
}
Наконец рисунок бары:
protected void paintComponent(Graphics g) {
super.paintComponent(g);
int length = numberArray.length;
Graphics2D g2d = (Graphics2D) g;
g2d.setColor(Color.white);
g2d.fillRect(0, 0, getWidth(), getHeight());
g2d.setColor(Color.gray);
for(int count = 0; count < length; count++) {
g2d.fill3DRect((getWidth()/length) * (count + 1), 0,
getWidth()/length, getHeight() - (numberArray[count] * 3),
true);
playSound(numberArray[count]);
}
System.out.print(".");
}
Я знаю, что это не перерисовываясь между ними (с задержкой или без нее), потому что он печатает только один ». когда я начну сортировку.
Возможный дубликат ... http://stackoverflow.com/questions/4120528/repaint-in-a-loop –