2010-03-22 25 views
5

Tôi có thể xử lý tình huống như thế nào, nơi một đệ trình nghe một nút chưa được khai báo?scala event swing :: gà hoặc trứng

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

Tôi không thể khai báo seznam trước tiên, vì nó tham chiếu đến trường detail. Vậy làm thế nào tôi có thể viết cái này?

+2

Hãy thử tạo một hoặc cả hai trường 'lazy val'. – retronym

+0

+1 cho một tiêu đề thú vị :-) – missingfaktor

+1

tôi đã chỉnh sửa mọi val: '% s/val/lazy val/g' và tôi vẫn gặp lỗi' not found' – coubeatczech

Trả lời

3

listenTo là phương pháp công khai. Điều dễ nhất để làm là tạo ra chúng như bạn đã hiển thị ở trên, nhưng thêm detail.listenTo(button) sau khi bạn đã tạo nút:

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