2010-12-03 10 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가 실제로 필요한 경우이를 포함하도록 일부 변경을 수행 할 수 있어야합니다. 또 다른 옵션은 입력 한 후 사용자 입력의 유효성을 검사하는 것입니다.

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; 
       } 
      } 
     } 
    }); 
관련 문제