2016-04-09 2 views
3

Я пытаюсь изменить изображение LayoutX и LayoutY позиции за 1 секунду. Но я не могу найти подходящий для этого метод (таймер). Я ищу что-то похожее на JavaScript «setInterval», которое просто позволяет мне создать «таймерный цикл» с использованием Java или JavaFX.Дайте изображение новое положение X и Y каждые 1 секунду

Любые советы широко распространены!

+0

Вы имеете в виду как: https://docs.oracle.com/javase/tutorial/uiswing/misc/timer.html? – c0der

ответ

3

С помощью java.util.Timer вы можете запланировать такую ​​задачу.

Метод timer.schedule() выполняет только одну задачу. Чтобы повторить вашу задачу , воспользуйтесь методом timer.scheduleAtFixedRate().

Timer timer = new Timer(); 
timer.scheduleAtFixedRate(new TimerTask() { 

    @Override 
    public void run() { 
     System.out.println("hello"); 
    } 
}, 1000, 1000); 

Второй параметр scheduleAtFixedRate() является задержка перед первым исполнением в миллисекундах и последний параметр представляет собой интервал между задачами выполняется в миллисекундах.

1

Для этой цели можно использовать Timeline с количеством циклов INDEFINITE.

Пример:

Timeline tl = new Timeline(new KeyFrame(Duration.seconds(1), evt -> { 
    // toggle image postion 
    imageView.setLayoutX(200 - imageView.getLayoutX()); 
    imageView.setLayoutY(200 - imageView.getLayoutY()); 
})); 
tl.setCycleCount(Animation.INDEFINITE); 
tl.play(); 

Это гарантирует обработчик событий работает на потоке приложения JavaFX.

0

javax.swing.Timer демонстрация:

public static void main(String[] args) { 

     JFrame jf = new JFrame(); 

     jf.setPreferredSize(new Dimension(200,100)); 
     int sec = 5 ; 
     JLabel lbl = new JLabel(" auto closing in "+sec + " seconds."); 
     jf.getContentPane().add(lbl); 

     jf.pack(); 
     jf.setVisible(true); 

     runTimer(sec , jf); 
    } 

    /** 
    * Timer to auto close frame. 
    * 
    * @param duration in seconds 
    * @param jf 
    */ 
    protected static void runTimer(int duration, final JFrame jf) { 

     //add action listner to be acrivated by timer 
     ActionListener taskPerformer = new ActionListener() { 
      @Override 
      public void actionPerformed(ActionEvent evt) { 
       jf.dispose(); 
      } 
     }; 

     if (duration >60) 
     { 
      duration = 60; //set max timer 
     } 

     new javax.swing.Timer(duration * 1000, taskPerformer).start(); 
    } 
Смежные вопросы