Java 我只能在用户完成修改文本小部件时触发事件吗?

Java 我只能在用户完成修改文本小部件时触发事件吗?,java,swt,listener,Java,Swt,Listener,我有一个SWTText控件。我试图弄清楚当用户修改完控件(即它被修改,然后被弹出标签)时,如何监听。我不希望每次文本框中的字符更改时都调用我的侦听器,也不希望在用户遍历页面上的字段时调用它。我只想在用户修改后离开控件时使用它 我已经查看了文本控件可用的各种侦听器,但是除非我遗漏了一些内容,否则我看不到类似的内容。我错过了吗?听起来你在找一个FocusListener。文本控件继承了addFocusListener()等来自控件,因此请检查其API文档的继承方法部分。听起来您在寻找FocusLis

我有一个SWT
Text
控件。我试图弄清楚当用户修改完控件(即它被修改,然后被弹出标签)时,如何监听。我不希望每次文本框中的字符更改时都调用我的侦听器,也不希望在用户遍历页面上的字段时调用它。我只想在用户修改后离开控件时使用它


我已经查看了
文本
控件可用的各种侦听器,但是除非我遗漏了一些内容,否则我看不到类似的内容。我错过了吗?

听起来你在找一个
FocusListener
文本
控件继承了
addFocusListener()
等来自
控件
,因此请检查其API文档的继承方法部分。

听起来您在寻找
FocusListener
Text
控件继承了
addFocusListener()
控件的
等,因此请检查其API文档的继承方法部分。

  • 将文本内容保存到焦点增益时的变量,然后在焦点丢失时将其与最新文本进行比较-如果不同,则修改文本,否则不修改

  • 不会在每次字符更改时调用此侦听器

  • 如果只需遍历控件(使用TAB键),还可以检测文本是否已更改

import org.eclipse.swt.swt;
导入org.eclipse.swt.events.FocusEvent;
导入org.eclipse.swt.events.FocusListener;
导入org.eclipse.swt.layout.GridData;
导入org.eclipse.swt.layout.GridLayout;
导入org.eclipse.swt.widgets.Display;
导入org.eclipse.swt.widgets.Shell;
导入org.eclipse.swt.widgets.Text;
公共类代码片段19{
私有静态字符串temp=“”;
公共静态void main(字符串[]args){
显示=新显示();
外壳=新外壳(显示);
setLayout(新的GridLayout());
最终文本文本=新文本(shell,SWT.BORDER);
setLayoutData(新的GridData());
addFocusListener(新FocusListener(){
@凌驾
公共无效焦点丢失(焦点事件e){
if(temp.equals(text.getText())){
System.out.println(“文本未修改”);
}否则{
System.out.println(“文本内容修改”);
}
}
@凌驾
获得公共无效焦点(焦点事件e){
temp=text.getText();
}
});
最终文本text1=新文本(shell、SWT.BORDER);
text1.setText(“月船号”);
text1.setLayoutData(新GridData());
最终文本text2=新文本(shell、SWT.BORDER);
text2.setText(“月船号”);
text2.setLayoutData(新的GridData());
shell.open();
而(!shell.isDisposed()){
如果(!display.readAndDispatch())
display.sleep();
}
display.dispose();
}
}
  • 将文本内容保存到焦点增益时的变量,然后在焦点丢失时将其与最新文本进行比较-如果不同,则修改文本,否则不修改

  • 不会在每次字符更改时调用此侦听器

  • 如果只需遍历控件(使用TAB键),还可以检测文本是否已更改

import org.eclipse.swt.swt;
导入org.eclipse.swt.events.FocusEvent;
导入org.eclipse.swt.events.FocusListener;
导入org.eclipse.swt.layout.GridData;
导入org.eclipse.swt.layout.GridLayout;
导入org.eclipse.swt.widgets.Display;
导入org.eclipse.swt.widgets.Shell;
导入org.eclipse.swt.widgets.Text;
公共类代码片段19{
私有静态字符串temp=“”;
公共静态void main(字符串[]args){
显示=新显示();
外壳=新外壳(显示);
setLayout(新的GridLayout());
最终文本文本=新文本(shell,SWT.BORDER);
setLayoutData(新的GridData());
addFocusListener(新FocusListener(){
@凌驾
公共无效焦点丢失(焦点事件e){
if(temp.equals(text.getText())){
System.out.println(“文本未修改”);
}否则{
System.out.println(“文本内容修改”);
}
}
@凌驾
获得公共无效焦点(焦点事件e){
temp=text.getText();
}
});
最终文本text1=新文本(shell、SWT.BORDER);
text1.setText(“月船号”);
text1.setLayoutData(新GridData());
最终文本text2=新文本(shell、SWT.BORDER);
text2.setText(“月船号”);
text2.setLayoutData(新的GridData());
shell.open();
而(!shell.isDisposed()){
如果(!display.readAndDispatch())
display.sleep();
}
display.dispose();
}
}

我喜欢这个主意。我被另一个项目分散了注意力,但当我重新开始时,我肯定会尝试这个。我喜欢这个想法。我被另一个项目分散了注意力,但当我重新开始时,我肯定会尝试这个。