2016-02-28 2 views
0

У меня есть JPanels на JFrame и вы хотите переместить их во время работы программы. Мой код - это много строк, поэтому я не могу вставить его здесь целиком, но вот пример функции toggle, где происходит перемещение.JPanel slide на лету

for(int h=frame.height; h<HEIGHT; h++){ 
    toolbar.setBounds(0, h, size.width, size.height); 
    try { 
     Thread.sleep(counter); 
    } catch (InterruptedException ex) { 
     Logger.getLogger(Scene.class.getName()).log(Level.SEVERE, null, ex); 
    } 
} 

По существу, я хочу, чтобы JPanel двигался с севера на юг.

Когда я вызываю эту функцию toggle во время инициализации от программы , тогда, когда я ее запускаю, я вижу, что JPanel перемещается правильно. Если я добавлю keylistener, чтобы я мог запускать JPanel для перемещения, когда программа запущена, происходит следующее: Программа ничего не делает в то время, когда JPanel нужно переместить, и после этого я вижу JPanel в своей последней позиции. Должен ли я каким-либо образом перерисовать jframe jpanel во время предыдущего образца или что?

+0

Я не думаю, что ваш размещенный код и текст являются достаточными, чтобы позволить нам понять вашу проблему достаточно, чтобы ответить на нее. Если вы не получите достойный ответ в ближайшее время, подумайте о создании и публикации [Минимальной, полной и проверенной примерной программы] (http://stackoverflow.com/help/mcve). –

ответ

1

KeyListener вызывается в awt-потоке. Если вы попытаетесь анимировать нить awt, ничего не случится, так как качание краски на awt-нитке. Вам нужно создать новый поток для анимации и использовать Swing.InvokeLater или аналогично рисовать анимацию.

+0

Или используйте таймер поворота. 1+ –

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