Problemumgehung für JFormattedTextField Fehler in Java für Mac OS X 10.6 Update 2 (1.6.0_20)
-
23-10-2019 - |
Frage
Es gibt anscheinend einen Fehler, der im neuesten Java -Update für Mac OS X eingeführt wird, wodurch Löschungen in JFormattedTextFields zweimal durchgeführt werden. Sehen http://lists.apple.com/archives/java-dev/2010/may/msg00092.html
Die Standard -DELTORTORT.DeletEprevcharaction wird zweimal aufgerufen, wenn die Löschungstaste gedrückt wird.
Gibt es Vorschläge für eine Problemumgehung?
Ich denke darüber nach, die Löschaktion für meine Textfelder durch eine gepatchte Version zu ersetzen, die diese doppelten Aufrufe irgendwie herausfiltert.
Lösung
Meine Problemumgehung, das scheint ziemlich gut zu funktionieren:
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;
}
});
}
}
Der einzige Nachteil, den ich bisher gefunden habe, ist, dass Sie nicht mehr als einen Charakter pro Millisekunde löschen können.