2010-12-03 119 views

回答

6

使用VerifyListener並根據用戶輸入拒絕字符。

import org.eclipse.swt.SWT; 
import org.eclipse.swt.events.VerifyEvent; 
import org.eclipse.swt.events.VerifyListener; 
import org.eclipse.swt.widgets.Display; 
import org.eclipse.swt.widgets.Shell; 
import org.eclipse.swt.widgets.Text; 

public class Test { 

    public static void main(String[] args) { 
     Display display = new Display(); 
     Shell shell = new Shell(display); 

     final Text text = new Text(shell, SWT.BORDER); 
     text.addVerifyListener(new VerifyListener() { 

      @Override 
      public void verifyText(VerifyEvent e) { 
       // allows cut (CTRL + x) 
       if (e.text.isEmpty()) { 
        e.doit = true; 
       } else if (e.keyCode == SWT.ARROW_LEFT || 
          e.keyCode == SWT.ARROW_RIGHT || 
          e.keyCode == SWT.BS || 
          e.keyCode == SWT.DEL || 
          e.keyCode == SWT.CTRL || 
          e.keyCode == SWT.SHIFT) { 
        e.doit = true; 
       } else { 
        boolean allow = false; 
        for (int i = 0; i < e.text.length(); i++) { 
         char c = e.text.charAt(i); 
         allow = Character.isDigit(c) || Character.isWhitespace(c); 
         if (! allow) { 
          break; 
         } 
        } 
        e.doit = allow; 
       } 

      } 
     }); 
     text.setSize(200, 20); 
     shell.pack(); 
     shell.open(); 
     while (!shell.isDisposed()) { 
      if (!display.readAndDispatch()) 
       display.sleep(); 
     } 
     display.dispose(); 
    } 
} 
+0

感謝您的解決方案 - 你甚至可以美化這個使用SWT.BS的鍵代碼8 – Gregor 2012-09-04 09:22:24

0

在Swing中,您有一個JFormattedTextField,它將完成該操作。但我認爲SWT中沒有類似的東西。如果這真的是你需要的,你應該能夠做一些改變來包含一個JFormattedTextField。另一種選擇是在輸入後驗證用戶的輸入。

2

設置該檢查是插入的文本只包含數字文本控制VerifyListener

這比使用關鍵代碼的解決方案好得多。由於它在輸入上工作,因此不會阻止粘貼和刪除等操作。

例子:

text.addVerifyListener(new VerifyListener() { 
    @Override 
    public void verifyText(VerifyEvent e) { 
      for (int i = 0; i < e.text.length(); i++) { 
       if (!Character.isDigit(e.text.charAt(i))) { 
        e.doit = false; 
        return; 
       } 
      } 
     } 
    }); 
相關問題