JFormattedTextField的解决方法删除Java for Mac OS X 10.6 Update 2(1.6.0_20)中的错误

时间:2010-06-03 08:09:56

标签: java swing macos jformattedtextfield

最新的Mac OS X Java更新中显然存在一个错误,导致JFormattedTextFields中的删除执行两次。 见http://lists.apple.com/archives/java-dev/2010/May/msg00092.html

按下删除键时,将调用DefaultEditorKit.deletePrevCharAction两次。

是否有针对变通方法的建议?

我正在考虑用修补版本替换我的文本字段的删除操作,该修补版本会以某种方式过滤掉这些重复的调用。

1 个答案:

答案 0 :(得分:2)

我的解决方法,似乎运作得很好:

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;
            }
        });
    }
}

到目前为止,我发现的唯一缺点是你不能每毫秒删除多个字符。