我有一個SWT Text
控件。我試圖弄清楚如何在用戶完成修改控件時偵聽,即修改並將其從標籤中刪除。我不希望每次在文本框中改變角色時都會調用偵聽器,並且我不希望在用戶遍歷頁面上的字段時調用此偵聽器。我只在用戶修改然後離開控制時才需要它。只有當用戶完成修改文本小部件時,我纔可以觸發事件嗎?
我已經看過Text
控件可用的各種聽衆,但除非我錯過了一些東西,我沒有看到任何這樣的東西。我錯過了嗎?
我有一個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();
}
}
這聽起來像你正在尋找一個FocusListener
。 Text
控件從Control
繼承addFocusListener()
等,因此請檢查其API文檔的繼承方法部分。
我喜歡這個主意。我分心到一個不同的項目,但當我回到它,我一定會嘗試這個。 – chama 2014-09-08 14:55:46
如果它爲你工作,那麼請接受我的答案。 – 2014-09-09 05:49:26
我還沒有回到它。當我有機會嘗試時,我肯定會接受對我有用的答案。抱歉耽擱了。 – chama 2014-09-10 12:21:10