2010-06-03 4 views
0

По всей видимости, в последнем обновлении Java для Mac OS X произошла ошибка, которая приводит к удалению в JFormattedTextFields дважды. См. http://lists.apple.com/archives/java-dev/2010/May/msg00092.htmlОбходной способ для удаления JFormattedTextField ошибки в Java для Mac OS X 10.6 Обновление 2 (1.6.0_20)

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-версии была бы уместной, чтобы избежать добавления этого там, где это не нужно. –

 Смежные вопросы

  • Нет связанных вопросов^_^