显然,Mac OS X 的最新 Java 更新中引入了一个错误,它导致 JFormattedTextFields 中的删除被执行两次。请参阅http://lists.apple.com/archives/java-dev/2010/May/msg00092.html
按下删除键时,会调用 DefaultEditorKit.deletePrevCharAction 两次。
有什么解决方法的建议吗?
我正在考虑用一个修补版本替换我的文本字段的删除操作,该版本以某种方式过滤掉这些重复的调用。
显然,Mac OS X 的最新 Java 更新中引入了一个错误,它导致 JFormattedTextFields 中的删除被执行两次。请参阅http://lists.apple.com/archives/java-dev/2010/May/msg00092.html
按下删除键时,会调用 DefaultEditorKit.deletePrevCharAction 两次。
有什么解决方法的建议吗?
我正在考虑用一个修补版本替换我的文本字段的删除操作,该版本以某种方式过滤掉这些重复的调用。
我的解决方法,这似乎工作得很好:
public class PatchedTextField extends JFormattedTextField {
public PatchedTextField() {
super();
final Action originalDeleteAction =
getActionMap().get(DefaultEditorKit.deletePrevCharAction);
getActionMap().put(DefaultEditorKit.deletePrevCharAction,
new AbstractAction() {
ActionEvent previousEvent;
public void actionPerformed(ActionEvent e) {
// Filter out events that happen within 1 millisecond from each other
if (previousEvent == null || e.getWhen() - previousEvent.getWhen() > 1) {
originalDeleteAction.actionPerformed(e);
}
previousEvent = e;
}
});
}
}
到目前为止,我发现的唯一缺点是每毫秒不能删除一个以上的字符。