繁体   English   中英

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

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

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

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

有任何解决方法的建议吗?

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM