2010-09-16 76 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 
    } 
    } 
} 

如何讓'Main'在顯示之前等待'Login'?Scala Swing等待

+0

我認爲你必須在丟失的圓括號:如果(t.size ==新的Dimension(0,0)t.pack – 2010-09-16 06:26:07

+0

歐萊kullberg,謝謝。 – JohanSJA 2010-09-16 11:29:42

回答

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