2010-06-03 34 views
0

Mac OS X的最新Java更新中引入了一個錯誤,導致JFormattedTextField中的刪除操作執行兩次。 參見http://lists.apple.com/archives/java-dev/2010/May/msg00092.htmlJFormattedTextField的解決方法在Mac OS X 10.6更新2(1.6.0_20)中刪除Java錯誤

當按下刪除鍵時,DefaultEditorKit.deletePrevCharAction被調用兩次。

解決方法是否有任何建議?

我想用我的文本字段替換刪除操作與補丁版本,以某種方式過濾出這些重複的調用。

回答

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

,我迄今發現的是,你不能刪除每毫秒不止一個字符的唯一缺點。

+1

我想檢查操作系統和Java版本將是適當的,以避免將其添加到不需要的地方。 – 2010-06-03 09:12:43