2016-11-11 44 views
-1

當我添加一個VerifyListener只允許一個Text按Ctrl +X功能鍵入數字是行不通的。文本框的內容未被清除。 Ctrl + c工作正常。VerifyListener不允許CTRL + X在SWT文本操作

這可能是什麼原因?

@Override 
public void verifyText(VerifyEvent e) { 
    char inputChar = e.character; 
    int keyCode = e.keyCode; 
    e.doit = Character.isDigit(inputChar) || keyCode == SWT.BS || keyCode == SWT.DEL; 
    } 
} 
+3

請發佈您的驗證監聽器的代碼。 – Baz

+0

對我的回覆有何反饋? – Baz

+0

對不起,沒有機會嘗試代碼,因爲我找到了一種方法來處理它。我把它貼在下面。無論如何,非常感謝。 –

回答

0
@Override 
public void verifyText(VerifyEvent e) { 
     char inputChar = e.character; 
     int keyCode = e.keyCode; 
     String inputString = e.text; 
     e.doit = Character.isDigit(inputChar) || keyCode == SWT.BS || keyCode==SWT.DEL||inputString==""; 
} 

我添加一個檢查從文本控件獲得的文本,如果它是「」,這是工作的罰款。

2

您特別需要允許Text是空的,即在你的ListenerSWT.Verify,檢查它是否是空的,然後檢查如果它是一個數字。這將這樣的伎倆:

public static void main(String[] args) 
{ 
    Display display = new Display(); 
    final Shell shell = new Shell(display); 
    shell.setText("StackOverflow"); 
    shell.setLayout(new FillLayout(SWT.VERTICAL)); 

    Text text = new Text(shell, SWT.BORDER); 

    text.addListener(SWT.Verify, new Listener() 
    { 
     @Override 
     public void handleEvent(Event event) 
     { 
      Text source = (Text) event.widget; 
      String oldString = source.getText(); 

      String newString = oldString.substring(0, event.start) + event.text + oldString.substring(event.end); 

      if(newString.length() == 0) 
      { 
       return; 
      } 
      else 
      { 
       try 
       { 
        Double.parseDouble(newString); // Or Integer.parseInt(newString); 
       } 
       catch (NumberFormatException e) 
       { 
        event.doit = false; 
       } 
      } 
     } 
    }); 

    shell.pack(); 
    shell.open(); 
    while (!shell.isDisposed()) 
    { 
     if (!display.readAndDispatch()) 
      display.sleep(); 
    } 
    display.dispose(); 
}