как вставить таймер для обработки сортировки - PullRequest
0 голосов
/ 09 декабря 2011

Я боролся с таймером задержки.Как я могу сделать обмен видимым для наблюдателя?и, поместив цвет на выбранную полосу во время обработки свопинга?Это сортировка выбора, кстати.

selectionSort2.java

 /**
 *
 * @author Yuvinng
 */

 import java.awt.*; 
 import javax.swing.*;
import java.util.Random;
import javax.swing.Timer;
import java.awt.event.*;
 public class SelectionSortPanel2  extends JPanel{

protected JButton selection;
private final int width=400,height=400;
private static Random generator;
private int[] list=new int[100];
private Timer timer;


public void selectionSort(int[] list)
{
int min;
int temp;
for(int index=0; index<list.length-1;index++)
{
min=index;
for(int scan=index+1;scan<list.length;scan++)
 if(list[scan]<(list[min]))
     min=scan;
temp=list[min];
list[min]=list[index];
 list[index]=temp;
repaint();
}    
}
private class swapper implements ActionListener 
   {
      public void actionPerformed(ActionEvent event)
      {   
         selectionSort(list);
      }
   }
 }

Ответы [ 2 ]

2 голосов
/ 09 декабря 2011

javax.swing.Timer - хороший выбор, поскольку он скрывает нить, используемую для ожидания, и запускает время рисования. Просто нарисуйте результат one swap в методе таймера actionPerformed(). Вам придется реорганизовать selectionSort(), чтобы он мог запускаться по одному шагу за раз. Здесь есть связанный Timer пример здесь .

1 голос
/ 09 декабря 2011

Вместо использования таймера, который сортирует весь массив каждый раз, когда он вызывается, и без переписывания метода сортировки для сортировки только одного элемента при каждом вызове, вы можете сделать это.

Когда вы используете таймер, он фактическивыполнить в том же потоке, что и перекрасить парня, поэтому, если вы здесь не спите, парень не будет перекрашивать.

Вместо этого измените ваш swapper на Runnable и создайте новый потокс помощью вашего подкачки и запуска потока.

Затем, после замены и вызова перерисовки, вы можете попросить подкачку ненадолго приостановить Thread.sleep (задержка) .

JPanel не очищает себя между перерисовками, поэтому вы увидите только рост столбцов, но никогда не укорочение.Либо исправьте paintComponent, чтобы очистить графику, либо расширите JComponent.

Надеюсь, что это поможет вашему прогрессу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...