Как удалить последний символ в JTextField при нажатии клавиши удаления - PullRequest
1 голос
/ 12 сентября 2009

Я хочу использовать ключевой слушатель, который обнаруживается каждый раз, когда пользователь вводит текст в поле. Каждый раз, когда происходит ключевое событие, я хочу получить length() текста в JTextField. Если length >= limit, то я хочу отключить редактирование. Однако, если нажать клавишу удаления , я хочу удалить последний символ в JTextField и setEditable(true).

Как мне удалить последний символ в JTextField?

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 Ответ

1 голос
/ 12 мая 2010

Попробуйте обернуть весь обработчик событий в блок 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); 
                }
            }
        });                        
    } 

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

...