У меня есть ScalaFX LineChart
, XAxis
которого — время. Данные динамические, обновляются в файле AnimationTimer
. С течением времени график перемещается вправо, но график всегда начинается с 0, поэтому видимая область увеличивается, сжимая точки данных.
Вот Stage
:
new Stage {
title = plotTitle
scene = new Scene(600, 600) {
val series = new XYChart.Series[Number, Number]()
series.setName(s"Simple")
val xAxis = NumberAxis("Time (s)")
val yAxis = NumberAxis("Amplitude")
val lineChart = new LineChart(xAxis, yAxis)
lineChart.setAnimated(false)
lineChart.getData.add(series)
lineChart.setCreateSymbols(false)
root = lineChart
var index = 0
val timer = AnimationTimer { time =>
series.getData.add(XYChart.Data[Number, Number](index, math.cos(index)))
if (series.getData.size > 100) series.getData.remove(0, series.getData.size() - 100)
xAxis.lowerBound.value = math.max(index - 100, 0) // this has no effect
xAxis.upperBound.value = math.max(index, 100) // this has no effect
index += 1
}
timer.start()
}
}
Как обновить нижнюю/верхнюю границы XAxis
в обновлении AnimationTimer
? Я пытался установить значения XAxis.lower/upperBound
во время обновления анимации, но это не дало никакого эффекта. Я пробовал другие вещи безрезультатно. Есть решения JavaFX, которые я видел, но я не могу перевести их на ScalaFX, потому что нет однозначного сопоставления типов.
xAxis.forceZeroInRange = false
дает желаемый эффект, но я не думаю, что это ответ, потому что я хочу знать, как установить верхние/нижние границы по осям и обновить их во время анимации. - person user1332148   schedule 12.05.2020