scalafx.animation.Timeline не работает должным образом

Я начал пробовать ScalaFX API несколько дней назад. Чтобы изучить использование этого API, я просматриваю примеры на GitHub. Для тестирования функций класса TimeLine я использовал этот пример: ScalaFXAnimation.

Код для определения объекта TimeLine в примере выглядит следующим образом:

val timeline = new Timeline {
  cycleCount = Timeline.Indefinite
  autoReverse = true
  keyFrames = Seq(
    at (2 s) {rect1.x -> 200d tween Interpolator.EASE_IN},
    at (4 s) {rect1.x -> 300d},
    at (3 s) {rect2.y -> 100d tween Interpolator.EASE_BOTH},
    at (4 s) {rect2.y -> 300d},
    at (4 s) {rect2.width -> 300d tween Interpolator.EASE_OUT}
  )
}

Если я попытаюсь сделать это в своем собственном проекте, я получу некоторые ошибки компиляции, например:

Error:(58, 5) not found: value cycleCount

Значения autoReverse, keyFrames и s также не найдены. Я не настраивал проект и его структуру самостоятельно, а клонировал "Hello world"-проект с GitHub: scalafx-привет-мир. Этот проект и скомпилирован должным образом.

Может ли это быть ошибкой в ​​ScalaFX? У вас есть идеи, как решить эту проблему?

EDIT2: полный код

package hello

import scalafx.animation.{Timeline, Interpolator}
import scalafx.application.JFXApp
import scalafx.application.JFXApp.PrimaryStage
import scalafx.scene.Scene
import scalafx.scene.paint.Color
import scalafx.scene.shape.Rectangle
import scalafx.Includes._
import scala.language.postfixOps

object ScalaFXHelloWorld extends JFXApp {

  val rect1 = new Rectangle {
    width = 100
    height = 200
    fill = Color.Red
  }

  val rect2 = new Rectangle {
    width = 200
    height = 120
    fill = Color.Green
  }

  val timeline = Timeline {
    cycleCount = Timeline.Indefinite
    autoReverse = true
    keyFrames = Seq(
      at (2 s) {rect1.x -> 200d tween Interpolator.EASE_IN},
      at (4 s) {rect1.x -> 300d},
      at (3 s) {rect2.y -> 100d tween Interpolator.EASE_BOTH},
      at (4 s) {rect2.y -> 300d},
      at (4 s) {rect2.width -> 300d tween Interpolator.EASE_OUT}
    )
  }

  timeline.play()
  stage = new PrimaryStage {
    scene = new Scene {
      content = List(rect1, rect2)
    }
  }
}

person Mario P. Waxenegger    schedule 20.02.2015    source источник
comment
Приведенный выше код взят прямо из примера, который работает правильно. Ваша проблема, возможно, связана с включениями, которые приносят классы JavaFX, а не классы ScalaFX. Можете ли вы опубликовать полный фрагмент кода, с которым у вас возникли проблемы, с включениями?   -  person Jarek    schedule 20.02.2015
comment
Нет, я использовал тот же импорт, что и в примере. Внес правку в пост с импортом   -  person Mario P. Waxenegger    schedule 20.02.2015
comment
Код, который вы разместили до сих пор, выглядит нормально. Хотя это всего лишь фрагменты, проблема в другом. Можете ли вы опубликовать полный пример, который можно использовать для воспроизведения вашей ошибки компиляции?   -  person Jarek    schedule 20.02.2015
comment
Сделал еще одну правку с полным исходным кодом - я думаю, он такой же, как в примере   -  person Mario P. Waxenegger    schedule 20.02.2015


Ответы (1)


В последней версии вам не хватает new перед Timeline. Так должно быть:

val timeline = new Timeline { 
   ... 
}
person Jarek    schedule 20.02.2015
comment
Большое спасибо. Теперь это работает, но IntelliJ по-прежнему говорит мне, что это cannot resolve symbol s. Но это может быть проблема с моей IDE... - person Mario P. Waxenegger; 21.02.2015
comment
@MarioP.Waxenegger Я знаю, что уже немного поздно, но у меня была та же проблема. Способ исправить это — изменить 1 s на использование числа с плавающей запятой или двойного числа, такого как 1.0 s. - person J Atkin; 26.11.2015