Scala Swing: проверка целочисленного ввода для текстового поля
У меня есть 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)
}
Но новая нажатая клавиша добавляется после применения фильтра.
1 ответ
Решение
Ответ заключается в использовании event.consume следующим образом
val intF = new TextField(defInt.toString, 5)
{
inputVerifier = myV _
listenTo(keys)
reactions +=
{
case e: KeyTyped =>
{
if (!e.char.isDigit)
e.consume
}
}
}