2010-03-22 4 views
5

Comment puis-je gérer une situation, où un dossier écoute un bouton qui n'est pas encore déclaré?scala event swing :: poulet ou oeuf

val detail = new BoxPanel(Orientation.Vertical){ 
    listenTo(button) 
    } 
    val seznam = new BoxPanel(Orientation.Vertical){ 
    val button = new Button("But"){ 
     reactions += { 
     case ButtonClicked(_) => 
      detail.contents.clear 
      detail.contents += new Label("Anystring") 
    } 
    } 

Je ne peux pas déclarer seznam d'abord non plus, car il référence le champ detail. Alors, comment puis-je écrire cela?

+2

Essayez de faire un ou deux champs 'un val' paresseux. – retronym

+0

+1 pour un titre intéressant :-) – missingfaktor

+1

J'ai édité tous les val: '% s/val/paresseux val/g' et j'obtiens toujours l'erreur' not found' – coubeatczech

Répondre

3

listenTo est une méthode publique. La meilleure chose à faire est donc de les créer comme vous avez montré ci-dessus, mais ajouter detail.listenTo(button) après avoir créé le bouton:

val detail = new BoxPanel(Orientation.Vertical){ } 
val seznam:BoxPanel = new BoxPanel(Orientation.Vertical){ 
    val button = new Button("But"){ 
    reactions += { 
     case ButtonClicked(_) => 
     detail.contents.clear 
     detail.contents += new Label("Anystring") 
    } 
    } 
    detail.listenTo(button) 
}