Как перехватить вставку в текстовом виджете - PullRequest
0 голосов
/ 02 октября 2019

У меня есть поле ввода ТЕКСТ. Я хочу ограничить ввод букв или цифр. Другие символы должны быть преобразованы в заниженную оценку. Следующий код делает это. Однако когда пользователь вставляет в поле, он обходит слушателя, и необработанный текст помещается в поле

private class TextKeyVerifyListener implements VerifyListener
{
    @Override
    public void verifyText( VerifyEvent event )
    {
        if (Character.isLetterOrDigit( event.character ))
            event.text = "" + Character.toUpperCase( event.character ); 

        else if (!Character.isISOControl( event.keyCode ))
            event.text = "_"; 
    }
}

Как мне перехватить действие вставки, чтобы, по крайней мере, я мог повторно проанализировать текстовое поле. Это кажется тяжелым делом делать это в обработчике изменений для каждого нажатия клавиши. Любое решение должно быть кроссплатформенным: -)

Это может сделать перехват для CTRL-V, но пользователь также может использовать всплывающее меню и выбрать вставку.

Ответы [ 2 ]

1 голос
/ 02 октября 2019

VerifyEvent имеет поле text, содержащее весь проверяемый текст. Вы должны использовать это, а не character поле. text установлен на полный вставленный текст.

0 голосов
/ 05 октября 2019

Хорошо, для всех, кто пытается это сделать:

     if (event.keyCode == 0 || !Character.isISOControl( event.keyCode ))
        {
            StringBuilder text = new StringBuilder();
            char[] chars = event.text.toCharArray();

            for (char character : chars)
                if (Character.isLetterOrDigit( character ))
                    text.append( Character.toUpperCase( character ) );
                else
                    text.append( "_" ); //$NON-NLS-1$

            event.text = text.toString();
        }

Это немного тяжело для однократных нажатий, но оно преобразуется так, как я хотел.

Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...