开发者

Workaround for JFormattedTextField delete bug in Java for Mac OS X 10.6 Update 2 (1.6.0_20)

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.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜