2015-03-24 4 views
-2

У меня есть связанный список с координатами точек. Я хочу построить одну строку в секунду. Вот функция для построения графиков:Участок 1 линия за 1 секунду java

public void draw(Graphics g){ 
    for (Line line : lines) { 
     g.drawLine(line.x1, line.y1, line.x2, line.y2); 
    } 
} 
+0

Что именно ваш вопрос? – jny

+0

Вы хотите замедлить эту итерацию так, чтобы вы выполняли 'g.drawLine (line.x1, line.y1, line.x2, line.y2)' один раз в секунду? –

+0

Да, я говорю это четко: Участвуйте в одной строке за 1 секунду – Steve

ответ

0

Вы можете создать новую тему и ждать 1000 милисекунд:

public void draw(Graphics g){ 

    new Thread(new Runnable() { 

     @Override 
     public void run() { 
      for (Line line : lines) { 
       g.drawLine(line.x1, line.y1, line.x2, line.y2); 
       Thread.sleep(1000); 
      } 

     } 
    }).start(); 
} 
+0

Проголосовать за меня. Вы создаете поток внутри цикла for-each, тем самым делая ваш спальный избыток. Может быть, потребуется немного больше времени, чтобы ответить и получить его в первый раз? –

+0

Извините. Ошибка копирования. – Christian

+0

@ Duncan Извините. Я изменил его. Торопился. – Christian

3

Я думаю, что это будет полезно,

int i = 0; 
Timer timer = new Timer(1000, null); 
    timer.setInitialDelay(0); 

    timer.addActionListener(new ActionListener() { 

     @Override 
     public void actionPerformed(ActionEvent e) { 
      if(i < lines.length){ 
       Line line = lines[i]; 
       g.drawLine(line.x1, line.y1, line.x2, line.y2); 
       i++; 
      }else{ 
       timer.stop(); 
      } 
     } 
    }); 
    timer.start(); 
+0

1+ для таймера. Все обновления Swing должны выполняться в Thread Dispatch Thread (EDT). – camickr

Смежные вопросы