2012-07-27 101 views
0

我有一個TextField,我希望從中獲取整數輸入。在以前的C#WPF的版本,我訂閱PreviewTextInput如下:Scala Swing:驗證TextBox的整數輸入

private void PrevInp(object sender, TextCompositionEventArgs e) 
{ 
    int temp; 
    if (!(int.TryParse(e.Text, out temp))) 
     e.Handled = true; 
    else 
     if (TextAltered == false) 
     { 
     inp.Text = ""; 
     TextAltered = true; 
     } 
} 

希望我可以做一些在斯卡拉乾淨了一點。我看到你可以爲inputVerifier設置一個函數,但只有在TextField失去焦點時才調用inputVerifier。

我可以使用事件的keyTyped像這樣:

val intF = new TextField(defInt.toString, 5) 
{ 
    inputVerifier = myV _ 
    listenTo(keys, this) 
    reactions += { case e: KeyTyped => text = text.filter(_.isDigit)} 

    def myV(v: Component): Boolean = text.forall(_.isDigit) 

}

而利用過濾器後按新的鍵被添加。

回答

3

的答案是使用event.consume如下

val intF = new TextField(defInt.toString, 5) 
{ 
    inputVerifier = myV _ 
    listenTo(keys) 
    reactions += 
    { 
     case e: KeyTyped =>  
     { 
     if (!e.char.isDigit) 
      e.consume   
     } 
    } 
}