VerifyListener不允许SWT文本中的CTRL + X操作

时间:2016-11-11 11:43:38

标签: java validation swt listener

当我添加VerifyListener以允许仅向Text输入数字时, Ctrl + x 功能无效。文本框的内容未清除。 Ctrl + c 工作正常。

这可能是什么原因?

@Override
public void verifyText(VerifyEvent e) {
    char inputChar = e.character;
    int keyCode = e.keyCode;
    e.doit = Character.isDigit(inputChar) || keyCode == SWT.BS || keyCode == SWT.DEL;
    }
}

2 个答案:

答案 0 :(得分:2)

您特别需要允许Text为空,即在Listener SWT.Verify中,检查它是否为空,然后检查它是否是一个数字。这样就可以了:

public static void main(String[] args)
{
    Display display = new Display();
    final Shell shell = new Shell(display);
    shell.setText("StackOverflow");
    shell.setLayout(new FillLayout(SWT.VERTICAL));

    Text text = new Text(shell, SWT.BORDER);

    text.addListener(SWT.Verify, new Listener()
    {
        @Override
        public void handleEvent(Event event)
        {
            Text source = (Text) event.widget;
            String oldString = source.getText();

            String newString =  oldString.substring(0, event.start) + event.text + oldString.substring(event.end);

            if(newString.length() == 0)
            {
                return;
            }
            else
            {
                try
                {
                    Double.parseDouble(newString); // Or Integer.parseInt(newString);
                }
                catch (NumberFormatException e)
                {
                    event.doit = false;
                }
            }
        }
    });

    shell.pack();
    shell.open();
    while (!shell.isDisposed())
    {
        if (!display.readAndDispatch())
            display.sleep();
    }
    display.dispose();
}

答案 1 :(得分:0)

@Override
 public void verifyText(VerifyEvent e) {
      char inputChar = e.character;
      int keyCode = e.keyCode;
      String inputString = e.text;
      e.doit = Character.isDigit(inputChar) || keyCode == SWT.BS || keyCode==SWT.DEL||inputString=="";
}

我添加了对从Text小部件获取的文本的检查,如果它是“”,并且它工作正常。