Принудительно выполнить немедленную отрисовку в JavaFX

StackOverflow https://stackoverflow.com/questions/528313

  •  22-08-2019
  •  | 
  •  

Вопрос

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

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

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

Спасибо!

Это было полезно?

Решение

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

Другие советы

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

Видеть этот урок для примера.

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top