2009-09-12 3 views
1

Я пытаюсь сделать это следующим образом: Попробуйте использовать прослушиватель клавиш, чтобы каждый раз, когда пользователь вводит текст в поле. Каждый раз, когда запускается ключевое событие, получите длину() текста в JTextField. Если длина> = предел, отключите редактирование. Однако, если нажать клавишу удаления, удалите последний символ в JTextField и setEditable (true). Моя проблема заключается в том, как удалить последний символ в JTextField? Это уже правильно? Потому что это не сработало. Спасибо.KeyListener (KeyPressed) не работает

Вот некоторые из моего кода:

public void keyPressed(KeyEvent evt) 
    { 
    } 
public void keyReleased(KeyEvent evt) 
    { 
     int limit = 1; 
    JTextField text = (JTextField)evt.getSource(); 
     if (text.getText().length() >= limit) 
        { text.setEditable(false); } 
     else 
      if(evt.getKeyCode() == KeyEvent.VK_BACK_SPACE) 
       { answer =""; 
        text.setEditable(true); 
         }   
    } 
public void keyTyped(KeyEvent evt) 
    { 
    } 
} 

ответ

1

Попробуйте обертывание всего обработчика событий в SwingUtilities.invokeLater блоке.

public void keyReleased(KeyEvent evt) 
    { 
     final int limit = 1; 
     final int keyCode = evt.getKeyCode(); 
     final JTextField text = (JTextField)evt.getSource(); 

     SwingUtilities.invokeLater(new Runnable(){ 

      public void run() { 
       if (text.getText().length() >= limit) 
       { 
        text.setEditable(false); 
       } 
       else if(keyCode == KeyEvent.VK_BACK_SPACE) 
       {  
        answer =""; 
        text.setEditable(true); 
       } 
      } 
     });       
    } 

Поскольку обработка событий и свинг GUI обновлений оба сделали на событие диспетчерской темы, это может быть необходимо, чтобы метод text.getText(), чтобы получить все введенный текст.

+0

Отличный трюк! У меня были проблемы с этим типом событий в прошлом, и это лучшее временное решение. Эй, erietha, вы должны подумать о принятии своего поста в качестве решения. – Jeach

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