Java 如何将getsource()与[org.eclipse.swt.widgets.event]中的事件一起使用

Java 如何将getsource()与[org.eclipse.swt.widgets.event]中的事件一起使用,java,eclipse,swt,verify,Java,Eclipse,Swt,Verify,我要验证文本中的输入。请确保该值介于0和100之间。但由于某些原因,我无法使用VerifyEvent来执行此操作。如下所示,我想在public voidhandleEvent(Event事件)中获取“check”值,我该怎么做 control.addListener (SWT.Verify, new Listener () { public void handleEvent(VerifyEvent e) { // TODO Auto-generated method st

我要验证文本中的输入。请确保该值介于0和100之间。但由于某些原因,我无法使用
VerifyEvent
来执行此操作。如下所示,我想在public void
handleEvent(Event事件)
中获取“check”值,我该怎么做

control.addListener (SWT.Verify, new Listener () {
    public void handleEvent(VerifyEvent e) {
        // TODO Auto-generated method stub
        Text text = (Text)e.getSource();
        String t = text.getText();
        String check = t.substring(0, e.start) + e.text + t.substring(e.end);
        e.doit = validateInput(check);
    }
    @Override
    public void handleEvent(Event event) {
        // TODO Auto-generated method stub
    }
});

好的,您想添加一个
SWT.Verify
,但不能将
VerifyListener
VerifyEvent
一起使用,因此无法访问
event.getSource()
。但是,由于您手动添加了
侦听器
,因此您知道其来源:

final Text textField = new Text(shell, SWT.BORDER);
textField.addListener(SWT.Verify, new Listener() {
    @Override
    public void handleEvent(Event e) {
        // You can access textField, since it is final
        final String oldS = textField.getText();
        String newS = oldS.substring(0, e.start) + e.text + oldS.substring(e.end);

        boolean isValid = true;

        if("".equals(newS))
        {
        }
        else
        {
            try
            {
                // first check, if text really is a number
                float value = Float.parseFloat(newS);

                // then check if it's between 0 and 100
                if(value < 0 || 100 < value)
                    isValid = false;
            }
            catch(NumberFormatException ex)
            {
                isValid = false;
            }
        }

        // if text is not a valid number, prevent user input
        if(!isValid)
            e.doit = false;
    }
});
final Text textField=新文本(shell,SWT.BORDER);
addListener(SWT.Verify,newlistener()){
@凌驾
公共无效handleEvent(事件e){
//您可以访问textField,因为它是最终的
最后一个字符串oldS=textField.getText();
String newS=oldS.substring(0,e.start)+e.text+oldS.substring(e.end);
布尔值isValid=true;
如果(“.”等于(新闻))
{
}
其他的
{
尝试
{
//首先检查文本是否为数字
float value=float.parseFloat(新闻);
//然后检查它是否在0和100之间
如果(值<0 | | 100<值)
isValid=false;
}
捕获(NumberFormatException ex)
{
isValid=false;
}
}
//如果文本不是有效数字,请禁止用户输入
如果(!isValid)
e、 doit=false;
}
});

因此,您将
侦听器
添加到
文本字段
。因此,您不需要
getSource()
方法,因为
textField
是源…

很抱歉,我没有明确说明这个问题:在handleEvent(VerifyEvent e)方法中:我已经知道如何检查0到100之间的值,我在validateInput(check)中编写了它。问题是,我想使用@Override public void handleEvent(Event-Event){//如何在这里验证值?Event似乎没有getSource()方法。如何作为最后一个方法handleEvent(VerifyEvent e)获取字符串检查;}VerifyEvent对我来说很清楚,但Event我不知道如何获取所有输入字符串。不幸的是,由于某些原因,我只能在这里使用事件。@user1618488好的,更改了我的答案。希望它能帮上忙。很抱歉我回复晚了,它很有效!!!我将textField更改为(Text)控件以适合我的项目。但是仍然有一个小错误:当我键入99时,它很酷。如果我想更改值,我使用退格。第二个9可以删除。但是第一个9不能。总之:如果我想更改输入的值,我必须用鼠标选择所有数字并键入新值。我不能使用从结尾到前面的退格删除。不管怎样,它都能工作!我正在考虑添加一些foucus()方法来消除这个错误,因为输入textfield不能为null,所以不能删除最后一个figure@user1618488在我的代码中添加了一个检查。现在它将接受一个空文本字段。如果对你有用,请考虑接受我的回答。