Scala-Swing:验证Textfield的Integer输入



我有一个TextField,希望从中获取整数输入。在以前的c#Wpf版本中,我订阅了如下的PreviewTextInput:

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;
      }
}

希望我能在Scala做一些更干净的事情。我看到你可以为inputVerifier设置一个函数,但inputVerifier只有在TextField失去焦点时才会被调用。

我可以这样使用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) 

}

但按下的新键是在应用过滤器后添加的。

答案是使用event.cosume,如下

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

相关内容

  • 没有找到相关文章

最新更新