提交批处理 UI 更新操作



我正在使用跷跷板编写扫雷克隆。对于雷区,我使用的是简单的按钮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!/button 更新一次发生,即使它会产生少量的感知延迟?

我不熟悉seesaw或其内部结构,但您想找到一种在 Swing 中使用双缓冲的方法。

另请参阅: https://docs.oracle.com/javase/tutorial/extra/fullscreen/doublebuf.html

最新更新