2010-09-16 3 views
1
//Main.scala 
/* imports */ 

object Main extends SimpleSwingApplication { 
    lazy val ui = new TabbedPane { 
    /* contents */ 
    } 

    def top = new MainFrame { 
    /* contents */ 
    } 

    override def startup(args: Array[String]) { 
    val t = top 

    val loginStatus = new Login(t).status 

    if (loginStatus == true) { 
     if (t.size == new Dimension(0, 0)) t.pack 
     t.visible = true 
    } else 
     quit 
    } 
} 

//Login.scala 
class Login(owner: Window) extends Dialog(owner) { 
    import Login._ 

    var status = true 
    contents = ui 

    listenTo(login) //login is a Button 
    reactions += { 
    case ButtonClicked(login) => { 
     if (/* login field is empty */) 
     status = false 
     else if (/* login info is correct */) 
     status = true 
     else /*login info is wrong*/ 
     status = false 
    } 
    } 
} 

Как я могу «Главная» ждать «входа» перед отображением?Scala Swing Wait

+0

Я думаю, что у вас есть недостающая скобка: если (t.size == нового измерения (0, 0) t.pack –

+0

олл Kullberg, спасибо. – JohanSJA

ответ

4

Используйте CountDownLatch:

//Main.scala 
/* imports */ 

object Main extends SimpleSwingApplication { 
    private val latch = new CountDownLatch(1) 

    lazy val ui = new TabbedPane { 
    /* contents */ 
    } 

    def top = new MainFrame { 
    /* contents */ 
    } 

    override def startup(args: Array[String]) { 
    val t = top 

    val loginDialog = new Login(t, latch) 
    latch.await 

    val loginStatus = loginWindow.status 

    if (loginStatus == true) { 
     if (t.size == new Dimension(0, 0)) { t.pack } 
     t.visible = true 
    } else 
     quit 
    } 
} 

//Login.scala 
class Login(owner: Window, latch: CountDownLatch) extends Dialog(owner) { 
    import Login._ 

    var status = true 
    contents = ui 

    listenTo(login) //login is a Button 
    reactions += { 
    case ButtonClicked(login) => { 
     latch.countdown 

     if (/* login field is empty */) 
     status = false 
     else if (/* login info is correct */) 
     status = true 
     else /*login info is wrong*/ 
     status = false 
    } 
    } 
} 
Смежные вопросы