scalafx-utils/src/main/scala/org/gerweck/scalafx/util/ParsedTextField.scala

33 lines
861 B
Scala
Raw Normal View History

2015-04-15 07:03:35 +00:00
package org.gerweck.scalafx.util
import scalafx.scene.control.TextField
import org.log4s._
/**
*
* @author Sarah Gerweck <sarah@atscale.com>
*/
2015-04-16 04:05:22 +00:00
class ParsedTextField[A, B <: Parseable[A]](default: A)(implicit val parser: B) {
2015-04-15 07:03:35 +00:00
private val logger = getLogger("org.gerweck.scalafx.util.ParsedTextField")
val field = new TextField
val property: parser.Prop = parser.makeNew(default)
field.text = parser.toString(default)
field.text onChange {
val s: String = field.text()
try {
property.value = parser.fromString(s)
} catch {
case nfe: IllegalArgumentException =>
// This is pretty normal while you're entering text: no need to make it loud
logger.trace(s"String doesn't parse successfully: $s")
case re: RuntimeException =>
logger.warn(re)(s"Error while parsing string: $s")
}
}
}