代码中执行setText()时会触发ModifyEvent,所以在modifyListener中嵌套setText()会循环触发该事件。
解决思路:
由同一次用户操作触发的连续多个event其time时戳是一致的。所以如果检测到同一事件同一时戳再次触发就认为是重复事件,直接阻止即可。
示例:
final Text text
= new Text(shell
, SWT
.BORDER
);
text
.setBounds(88, 64, 100, 25);
text
.addModifyListener(new ModifyListener() {
int time
;
@Override
public void modifyText(ModifyEvent e
) {
boolean canExcuteFlag
= false;
if (time
!= e
.time
) {
canExcuteFlag
= true;
this.time
= e
.time
;
}
if (canExcuteFlag
) {
text
.setText("你好"+time
);
System
.out
.println(e
.time
);
}
if (time
== e
.time
) {
return;
}
time
= e
.time
;
}
});
如果该文章解决了您的问题,节省了您的时间,望能打赏几毛辛苦钱,让我们一起为知识付费