我使用两个 JavaFX Timeline 对象在 ListCell 内创建一个倒数计时器和一个进度条(即缩小的 JavaFX 矩形)。当计时器达到零时,矩形的宽度变为零,并且从 ListView 中移除单元格。但是,整个 ListView 会自动刷新,从而导致其他单元格中的时间轴重置。这是从两个单元格开始的样子:
在代码中,updateItem方法从模型中获取秒数并设置计时器标签的文本。当一个信元从ListView中移除,的updateItem调用与含有复位时间线上的字符串“20”一个CellData对象。但我希望带有未完成计时器的单元格继续;不是从头开始。这是最小的、可重现的示例:
public class AnimatedCells extends Application {
public class MyCell extends ListCell<CellData> {
private CellComponent cc;
private Timeline rectTimeline, timerTimeline;
private KeyValue rectWidth;
public MyCell() {
cc = new CellComponent();
rectTimeline = new Timeline();
timerTimeline = new Timeline();
rectWidth = new KeyValue( cc.getRect().widthProperty(), 0 );
}
@Override
protected void updateItem( CellData item, boolean empty ) {
super.updateItem(item, empty);
if (empty || item == null) …Run Code Online (Sandbox Code Playgroud)