gpt4 book ai didi

java - 仅当用户完成修改文本小部件时才可以触发事件吗?

转载 作者:行者123 更新时间:2023-12-01 22:43:43 25 4
gpt4 key购买 nike

我有一个 SWT Text 控件。我试图弄清楚如何在用户完成修改控件时监听,即它被修改然后退出。我不希望每次文本框中的字符发生变化时调用我的监听器,也不希望当用户遍历页面上的字段时调用它。我只在用户修改然后离开控件时才需要它。

我已经查看了可用于 Text 控件的各种监听器,但除非我遗漏了某些内容,否则我没有看到类似的内容。我错过了吗?

最佳答案

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

  • 不会在每次角色更改时调用此监听器。

  • 如果您简单地遍历控件(使用 TAB 键),那么您也可以检测文本是否更改。

import org.eclipse.swt.SWT;
import org.eclipse.swt.events.FocusEvent;
import org.eclipse.swt.events.FocusListener;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;

public class Snippet19 {
private static String temp = "";

public static void main(String[] args) {
Display display = new Display();
Shell shell = new Shell(display);
shell.setLayout(new GridLayout());
final Text text = new Text(shell, SWT.BORDER);
text.setLayoutData(new GridData());
text.addFocusListener(new FocusListener() {

@Override
public void focusLost(FocusEvent e) {
if (temp.equals(text.getText())) {
System.out.println("Text not modified");
} else {
System.out.println("Text conent modified");
}

}

@Override
public void focusGained(FocusEvent e) {
temp = text.getText();

}
});
final Text text1 = new Text(shell, SWT.BORDER);
text1.setText("chandrayya");
text1.setLayoutData(new GridData());
final Text text2 = new Text(shell, SWT.BORDER);
text2.setText("chandrayya");
text2.setLayoutData(new GridData());
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
display.dispose();
}
}

关于java - 仅当用户完成修改文本小部件时才可以触发事件吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25691419/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com