Scala Swing Beginner

Ik probeer een inlogvenster te maken voor een app die ik aan het doen ben. Ik heb de hele dag gezocht naar een voorbeeld, maar ik kan niets vinden dat helpt. Mijn basisstructuur is als volgt:

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

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

Dus wat is de strategie om een ​​inlogvak te maken zonder dat het mainframe dit toont en sluit na inloggen en het weergeven van het mainframe. bedankt

3

1 antwoord

Hier is een werkend voorbeeld. Heeft het van een van mijn projecten gehaald en een klein beetje voor je aangepast:

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

Zoals je kunt zien, gebruik ik meestal een modale dialoog, dus deze blokkeert tijdens de initialisatie van de toepassing. Er zijn 2 resultaten: een gebruiker maakt succesvol inloggen en ziet uw hoofdframe of hij sluit het aanmeldingsdialoogvenster en IllegalStateException zou worden gegenereerd.

6
toegevoegd
Bedankt voor de hulp....
toegevoegd de auteur Ray Goodwin, de bron