Text控件的ModifyListener中调用setText()时ModifyEvent无限循环触发问题

    科技2024-07-07  74

    代码中执行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; // e.time 获取的是display.getLastEventTime (); 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; //...后续步骤... } });

    如果该文章解决了您的问题,节省了您的时间,望能打赏几毛辛苦钱,让我们一起为知识付费

    Processed: 0.013, SQL: 8