Java基于Processing库实现列表元素添加2秒后自动删除求助
问题根源
你当前的实现只维护了全局唯一的计时状态和开始时间,无法跟踪每个独立元素的存活时长:
- 每次按下空格都会覆盖全局的
startTime,旧元素的计时信息直接丢失 - 触发删除逻辑时只能固定删除列表第一个元素,无法匹配到真正超时的元素
实现代码
将列表元素改为绑定自身创建时间的结构体,每次遍历检查所有元素的超时状态即可:
// 自定义类存储元素内容和对应的创建时间 class TimedItem { String content; int createTime; TimedItem(String content, int createTime) { this.content = content; this.createTime = createTime; } } ArrayList<TimedItem> items = new ArrayList<>(); // 统一存活时长2秒 final int ITEM_LIFE_SPAN = 2000; void draw() { // 原有绘制逻辑... // 倒序遍历检查超时元素,避免正序删除导致的索引错位 for (int i = items.size() - 1; i >= 0; i--) { TimedItem current = items.get(i); if (millis() - current.createTime >= ITEM_LIFE_SPAN) { items.remove(i); } } // 业务使用示例:遍历存活元素绘制 for (int i = 0; i < items.size(); i++) { text(items.get(i).content, 50, 50 + i * 25); } } public void keyPressed(KeyEvent e) { if (e.getKeyCode() == 32) { // 空格键 // 添加元素时直接绑定当前时间戳 items.add(new TimedItem("new item", millis())); } }
注意事项
- 原来的全局
timeStarted、startTime变量已经不需要,可以直接删除 - 必须用倒序遍历执行删除操作,正序遍历删除会跳过部分元素的检查,导致逻辑异常
- 如果你的元素需要额外属性(比如位置、速度等),直接加在
TimedItem类里即可
内容的提问来源于stack exchange,提问作者AAAAAAbc
相关产品推荐
相关产品推荐

