Как получить выделенный текст текстового виджета при событии проверки слушателя verifyText (...) - PullRequest
0 голосов
/ 26 марта 2019

У меня есть текстовый виджет, который содержит числовое значение для порта (TCP). Я проверяю значение, поскольку максимальный размер порта составляет 65535.

Проблема: Поле изначально содержит значение 8001. Теперь, если пользователь дважды щелкает текстовый виджет, будет выделен весь текст. Он хочет ввести новый порт, например, 7002.

Для проверки На методе VerifyListener - verifyText я использую текущее значение текстового виджета (8001) и набранное в char (7).

-> 80017 недействительно

textField.addVerifyListener(new VerifyListener() {

    @Override
    public void verifyText(VerifyEvent e) {
        String text = ((Text) e.widget).getText();
        try {
           if(Integer.parseInt(text+e.character) > 65535) {

                   MessageBox.openError( composite.getShell(), 
                   "Invalid value", 
                   "Invalid value" );

                   e.doit = false;

           }
        } catch (Exception e2) {/*ignore*/}
        }
    });

1 Ответ

0 голосов
/ 26 марта 2019

Хорошо, я сделал это. :)

textField.addVerifyListener(new VerifyListener() {

    @Override
    public void verifyText(VerifyEvent e) {
        String text = ((Text) e.widget).getText();
        try {
           /*-------------------------------------------------------------------------*/
           String newText = text.substring(0, e.start) + e.text + text.substring(e.end);
           /*-------------------------------------------------------------------------*/
           if(Integer.parseInt(newText) > 65535) {

                   MessageBox.openError( composite.getShell(), 
                   "Invalid value", 
                   "Invalid value" );

                   e.doit = false;

           }
        } catch (Exception e2) {/*ignore*/}
    }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...