Принудительное немедленное рисование в JavaFX - PullRequest
7 голосов
/ 09 февраля 2009

Есть ли способ заставить приложение JavaFX перерисовать себя перед продолжением? Аналогичен методу рисования Swing Panel (Графика g) (я мог ошибочно указывать ключевые слова).

Рассмотрим следующий пример: вы пишете приложение TicTacToe вместе с ИИ, необходимым для компьютерного плеера. Вы хотели бы показать двух компьютерных игроков. Может быть, вы делаете двухсекундную паузу между поворотами компьютера, чтобы придать ему жизненный эффект. Когда вы нажимаете кнопку «Перейти», возникает большая пауза безответственности (время, необходимое для того, чтобы 9 ходов прошли с фальшивыми паузами, чтобы компьютер «решил»), а затем внезапно изображение приложения обновляется с завершенным состояние игры.

Похоже, JavaFX перерисовывается после завершения обработки в потоке приложения? Я не совсем уверен здесь.

Спасибо!

Ответы [ 3 ]

6 голосов
/ 09 февраля 2009

Вы правы. JavaFX управляется событиями и является однопоточным. Это означает, что перерисовка и ответ на событие не могут быть выполнены одновременно. Долгосрочная задача должна выполняться в отдельном потоке, чтобы они не блокировали отображение пользовательского интерфейса. После завершения задачи она может синхронизироваться обратно с потоком FX, вызывая FX.deferAction (), который просто выполняет код на главном нить.

1 голос
/ 11 марта 2009

Модель JavaFX состоит в том, чтобы отделить вас от рисования «материала» на экране. Это очень мощный инструмент, но он отличается от того, с чем вы, возможно, знакомы.

Правильно, что правильный способ сделать это в JavaFX - создать временную шкалу, в которой перемещение выполняется каждые X секунд и будет отображаться на этом ключевом кадре.

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

1 голос
/ 10 февраля 2009

Это не самый полезный ответ, так как я играл с JavaFX все полдня, но разве вы не использовали бы временные рамки, ключевые кадры и привязку для выполнения перерисовок вместо того, чтобы вызывать их явно, как вы? описал?

См. это руководство для примера .

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