2010-12-03 16 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

感謝 - あなたも、これは恐ろしいソリューションであるのkeyCode 8 – Gregor

+0

ためSWT.BSを使用するには、このを美化することができます!ペーストには使えません。 delete-keyには機能しません。それ以外には何のために働かないのですか?伝えるのは難しい。 – Lii

+0

@Lii私はちょうどctrl + x、ctrl + vとDELキーをサポートするソリューションを更新します。 – ozhan

0

Swingには、JFormattedTextFieldがあります。これはまさにそれを行います。しかし、私はSWTには何も似ていないと思う。 JFormattedTextFieldが必要な場合は、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; 
       } 
      } 
     } 
    }); 
関連する問題