Scala Swing - кнопка с действием - PullRequest
1 голос
/ 28 августа 2011

Я создал кнопку с заголовком и значком в моем представлении.

object playButton extends Button("play") {
  icon = new ImageIcon(getClass.getResource("/Play.gif"))
  verticalTextPosition = Alignment.Bottom
  horizontalTextPosition = Alignment.Center
}

Теперь я хочу добавить некоторые действия в контроллер.

view.playButton.action = Action(view.playButton.text) { 
  //...
}

Проблема в том, что это действие переопределяет значок кнопок. Итак ... я попробовал:

view.playButton.action = Action(view.playButton.text) { 
  icon = view.playButton.icon
}

Компилятор говорит:

[info] Compiling main sources...
[error] .../Controller.scala:11: not found: value icon
[error]     icon = view.playButton.icon
[error]     ^
[error] one error found

Что я делаю не так? Действие в документации имеет этот установщик для поля значка: http://www.scala -lang.org / api / current / scala / swing / Action.html .

1 Ответ

1 голос
/ 28 августа 2011

Посмотрите на источник для scala.swing.Action

В компаньоне object:

def apply(title: String)(body: =>Unit) = new Action(title) { 
  def apply() { body }
}

Другими словами, для вашего удобства они берут блок (в который вы положили icon = ...) и делаете его обработчиком событий для действия.

То, что вы на самом деле хотите сделать, это подкласс:

new Action("Hello") {
    icon = ...

    def apply() = ...
}

Это, похоже, не задокументировано.

...