当用户执行某些操作(例如单击按钮)时,我需要在 JLabel 中显示状态。此状态需要在 2 秒后消失。我为此使用以下内容。
Timer timer = new Timer(2000, new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
label.setVisible(false);
}
});
但是,用户可能多次单击该按钮并且该计时器被多次触发。这具有不希望的效果。当一个按钮被点击 3 次时。
第 0 秒:第 1 次点击:标签在第 2 秒消失
第 1 秒:第 2 次点击:标签在第 3 秒消失
第 2 秒:第 3 次点击:标签在第 4 秒消失
在这里,标签需要在第 4 秒后消失,但会在第 2 秒后消失。因此,我希望仅在最后一个事件后延迟 2 秒隐藏此标签
为了处理这个问题,我使用了一个原子计数器。
AtomicInteger counter = new AtomicInteger(0);
使用 counter.incrementAndGet() 为每个任务分配一个唯一的“taskCounter”
.
Timer timer = new Timer(5000, new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if (counter.get() == taskCounter) {
infoLabel.setVisible(false);
}
}
});
timer.start();
只有当它是最后一个被触发的事件时才会执行上述操作。确保我的标签在最后一个事件后至少 2 秒保持可见。
有没有更好的方法来处理这个问题?