2014-09-05 18 views
0

我有一個SWT Text控件。我試圖弄清楚如何在用戶完成修改控件時偵聽,即修改並將其從標籤中刪除。我不希望每次在文本框中改變角色時都會調用偵聽器,並且我不希望在用戶遍歷頁面上的字段時調用此偵聽器。我只在用戶修改然後離開控制時才需要它。只有當用戶完成修改文本小部件時,我纔可以觸發事件嗎?

我已經看過Text控件可用的各種聽衆,但除非我錯過了一些東西,我沒有看到任何這樣的東西。我錯過了嗎?

回答

1
  • 保存的文本內容對焦點增益的變量,然後在焦點消失了最新的文本進行比較 - 如果不同,則文本被修改別人沒有。

  • 此偵聽器不會在每個字符更改時調用。

  • 如果您只是遍歷控件(使用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(); 
    } 
} 
+0

我喜歡這個主意。我分心到一個不同的項目,但當我回到它,我一定會嘗試這個。 – chama 2014-09-08 14:55:46

+0

如果它爲你工作,那麼請接受我的答案。 – 2014-09-09 05:49:26

+0

我還沒有回到它。當我有機會嘗試時,我肯定會接受對我有用的答案。抱歉耽擱了。 – chama 2014-09-10 12:21:10

2

這聽起來像你正在尋找一個FocusListenerText控件從Control繼承addFocusListener()等,因此請檢查其API文檔的繼承方法部分。

相關問題