2011-10-27 6 views
3

私はアプリのログインウィンドウを作成しようとしています。私は一日中一例を探しましたが、助けになるものは何も見つけられないようです。次のように私の基本的な構造は次のとおりです。Scala Swing Newbie

// App.scala 
object App extends SimpleSwingApplication { 
    val ui = new BorderPanel { 
    //content 
    } 

    def top = new MainFrame { 
    title = "title" 
    contents = ui 
    } 
} 

だから、戦略は、メインフレームが表示され、ログインした後、それを閉じて、メインフレームを表示せずにログインボックスを作成するためにいただきました。ありがとう

答えて

6

ここでは動作例です。私のプロジェクトの1からそれを取って、あなたのために少し調整:

import swing._ 
import scala.swing.BorderPanel.Position._ 

object App extends SimpleSwingApplication { 
    val ui = new BorderPanel { 
    //content 
    } 

    def top = new MainFrame { 
    title = "title" 
    contents = ui 
    } 

    val auth = new LoginDialog().auth.getOrElse(throw new IllegalStateException("You should login!!!")) 
} 

case class Auth(userName: String, password: String) 

class LoginDialog extends Dialog { 
    var auth: Option[Auth] = None 
    val userName = new TextField 
    val password = new PasswordField 

    title = "Login" 
    modal = true 

    contents = new BorderPanel { 
    layout(new BoxPanel(Orientation.Vertical) { 
     border = Swing.EmptyBorder(5,5,5,5) 

     contents += new Label("User Name:") 
     contents += userName 
     contents += new Label("Password:") 
     contents += password 
    }) = Center 

    layout(new FlowPanel(FlowPanel.Alignment.Right)(
     Button("Login") { 
     if (makeLogin()) { 
      auth = Some(Auth(userName.text, password.text)) 
      close() 
     } else { 
      Dialog.showMessage(this, "Wrong username or password!", "Login Error", Dialog.Message.Error) 
     } 
     } 
    )) = South 
    } 

    def makeLogin() = true // here comes you login logic 

    centerOnScreen() 
    open() 
} 

あなたは、私は一般的にモーダルダイアログを使用していますので、アプリケーションの初期化中にブロックします見ることができるように。 2つの結果があります。ユーザーがログインに成功してメインフレームが表示されるか、ログインダイアログが閉じてIllegalStateExceptionがスローされます。

+0

ヘルプありがとうございます.... –

関連する問題