scala/ScalaBook/chapter-06/textFields.scala
import scala.swing._
import scala.swing.event._
object text extends SimpleGUIApplication {
val user_name = "apostolos"
val password = "lala" //"HYa9gj"
var editDone = false
def top = new MainFrame {
title = "Login Screen"
val user_label = new Label("User Name ")
val user_field = new MaskedTextField("LLLLLLLL") {
columns = 10
}
val pass_label = new Label("Password ")
val pass_field = new PasswordField(10) {
echoChar = '•'
}
val error_label = new Label(" ")
contents = new GridBagPanel {
var c = new Constraints
c.gridwidth = java.awt.GridBagConstraints.RELATIVE
add(user_label,c)
add(user_field,c)
c.gridwidth = java.awt.GridBagConstraints.REMAINDER
add(Swing.VStrut(50), c)
c.gridwidth = java.awt.GridBagConstraints.RELATIVE
add(pass_label,c)
add(pass_field,c)
c.gridwidth = java.awt.GridBagConstraints.REMAINDER
add(Swing.VStrut(50), c)
add(error_label,c)
border = Swing.EmptyBorder(50, 50, 50, 50)
}
listenTo(pass_field)
reactions += {
case EditDone(`pass_field`) => {
if ( user_field.text.length > 0 )
if (user_field.text == user_name &&
pass_field.password.deepMkString("") == password)
error_label.text = "Welcome!"
else {
import scala.actors.Actor._
val delayGUI = actor {
error_label.text = "Wrong Username/Password"
Thread.sleep(2500)
error_label.text = "Please retry."
}
user_field.text = ""
user_field.requestFocus
}
}
}
}
}
class MaskedTextField(format: String) extends TextComponent.HasColumns {
var formatter : javax.swing.text.MaskFormatter = null
try {
formatter = new javax.swing.text.MaskFormatter(format)
} catch {
case e : java.text.ParseException =>
println("bad formatter")
exit(-1)
}
override lazy val peer: javax.swing.JFormattedTextField =
new javax.swing.JFormattedTextField(formatter)
def columns: Int = peer.getColumns
def columns_=(n: Int) = peer.setColumns(n)
}