There is apparently a bug introduced in the latest Java update for Mac OS X, which causes deletes in JFormattedTextFields to be performed twice. See http://lists.apple.com/archives/java-dev/2010/May/msg00092.html
The DefaultEditorKit.deletePrevCharAction is invoked twice when the delete key is pressed.
Are there any suggestions for a workaround?
I'm thinking of replacing the delete action for my text fields with a patched v开发者_运维百科ersion that somehow filters out these duplicate invocations.
My workaround, that seems to be working quite well:
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;
}
});
}
}
The only downside that I have found so far is that you cannot delete more than one character per millisecond.
精彩评论