Mac OS X 10.6更新2(1.6.0_20)Java中JFormattedTextField删除错误的解决方法
显然,Mac OS X的最新Java更新中引入了一个bug,它导致JFormattedTextFields中的删除被执行两次。 看 按delete键时,将调用DefaultEditorKit.DeletePrevCharacter两次 有没有关于解决办法的建议Mac OS X 10.6更新2(1.6.0_20)Java中JFormattedTextField删除错误的解决方法,java,swing,macos,jformattedtextfield,Java,Swing,Macos,Jformattedtextfield,显然,Mac OS X的最新Java更新中引入了一个bug,它导致JFormattedTextFields中的删除被执行两次。 看 按delete键时,将调用DefaultEditorKit.DeletePrevCharacter两次 有没有关于解决办法的建议 我正在考虑将文本字段的删除操作替换为一个补丁版本,以某种方式过滤掉这些重复调用。我的解决方法似乎很有效: public class PatchedTextField extends JFormattedTextField { p
我正在考虑将文本字段的删除操作替换为一个补丁版本,以某种方式过滤掉这些重复调用。我的解决方法似乎很有效:
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;
}
});
}
}
到目前为止,我发现的唯一缺点是每毫秒不能删除超过一个字符。我想检查操作系统和Java版本是合适的,以避免在不需要的地方添加此项。