Java 如何将getsource()与[org.eclipse.swt.widgets.event]中的事件一起使用
我要验证文本中的输入。请确保该值介于0和100之间。但由于某些原因,我无法使用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
VerifyEvent
来执行此操作。如下所示,我想在public voidhandleEvent(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在我的代码中添加了一个检查。现在它将接受一个空文本字段。如果对你有用,请考虑接受我的回答。