首页 > 解决方案 > 如何在验证侦听器事件 verifyText(...) 上获取选定的文本小部件文本

问题描述

我有一个文本小部件,其中包含端口(TCP)的数值表示。我验证了这个值,因为最大端口大小是 65535。

问题:该字段最初包含值 8001。现在,如果用户双击文本小部件,则将选择整个文本。想要进入一个新的端口,比如 7002。

对于VerifyListener 的验证- verifyText 方法,我使用文本小部件(8001) 的当前值和输入的字符(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*/}
        }
    });

标签: javaswt

解决方案


好的,我做到了。:)

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*/}
    }
});

推荐阅读