Отправка действий по пакетному обновлению пользовательского интерфейса - PullRequest
0 голосов
/ 13 мая 2018

Я пишу клон тральщика с помощью Seesaw. Для минного поля я использую простые grid-panel кнопок. Я дошел до того, что когда вы нажимаете на кнопку, она заполняет сетку, чтобы раскрыть все пустые плитки, окружающие то место, где вы щелкнули. Чтобы «раскрыть плитку», я просто отключаю кнопку, связанную с плиткой.

Проблема в том, что она раскрывается постепенно, хотя выполняемая задача не стоит , что дорого. Со временем он будет случайным образом обновлять несколько пятнистых кнопок вокруг сетки, и это выглядит очень плохо. Я предпочел бы иметь секунду задержки, чем для этого, чтобы процедурно отключить кнопки.

В основном это обработчик нажатия кнопки:

(doseq [b buttons] ; Buttons are the grid cells
  (let [[tx ty] (sc/user-data b) ; The cell position is stored in the user data
        tile (b/get-tile-at board tx ty)] ; O(1) lookup

    (when (:uncovered? tile)
      (sc/invoke-later ; Because this chunk is actually being executed in a pool
        (sc/config! b :enabled? false)))))

Поскольку здесь нет ничего дорогостоящего, похоже, что каждый вызов config! вносит изменения в кнопку, и внешний вид кнопки обновляется по мере изменения.

Есть ли способ, чтобы каждый вызов на config! / обновление кнопки происходил сразу, даже если это создает небольшое количество воспринимаемой задержки?

1 Ответ

0 голосов
/ 13 мая 2018

Я не знаком с seesaw или его внутренними компонентами, но вы хотите найти способ использовать двойную буферизацию в Swing .

Смотрите также: https://docs.oracle.com/javase/tutorial/extra/fullscreen/doublebuf.html

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