2013-06-30 1 views
0

Мое диалоговое окно состоит из текстового поля и кнопки. Я хотел бы, чтобы произвольная строка была помещена в текстовое поле при каждом нажатии кнопки (*). Проблема, с которой я столкнулась, заключается в том, как сообщить текстовое поле, что такое событие произошло?Как изменить содержимое текстового поля в ответ на нажатие кнопки в Scala Swing?

Я попытался опубликовать собственное сообщение при каждом нажатии кнопки, но текстовое поле, похоже, вообще не реагирует на такое сообщение, хотя я его настроил с помощью listenTo.

Вот (не) работает минимальный пример, описывающий мою неудачную борьбу до сих пор:

import swing._ 
import swing.event._ 

case class SomethingHappened extends Event { 
    println("Yes, something indeed has been published!") 
} 

class MyDialog extends Dialog { 
    contents = new BoxPanel(Orientation.Vertical) { 
    val myButton = Button("Click me and something will happen!") { 
     publish(SomethingHappened()) 
    } 
    contents += new TextField { 
     listenTo(myButton) 
     reactions += { 
     case SomethingHappened() => 
      // This actually never happens... :(
      peer.setText("Voilà!") 
      println("You didn't expect it coming, did you?") 
     } 
    } 
    contents += myButton 
    } 
    open() 
} 

new MyDialog() 

рука помощи будет очень ценится здесь. Благодаря!

(*) А «нажатие кнопки» является заполнителем для более сложного события и используется здесь только для упрощения цели (учитывая, что ButtonClicked не то, что я ищу, мне нужно определить и опубликовать действительно настраиваемое событие). С другой стороны, обновление содержимого текстового поля по-прежнему является желаемым результатом этого «щелчка».

ответ

0

Попробуйте publish на myButton:

val myButton: Button = Button("Click me and something will happen!") { 
    println(this) 
    myButton.publish(SomethingHappened()) 
} 

this в этом случае относится к BoxPanel: Блок не метод Button класса, она передается в качестве аргумента к нему.

+0

Отлично! Работает как шарм! Большое спасибо! –

Смежные вопросы