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.

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top