Я почти не смею добавить что-нибудь в решение Майка Алленса (которое, как всегда, очень хорошо), но у меня это не сработало, потому что я не мог заставить свою scala найти и / или обработать файл .cssфайл.Я бы сделал это таким образом, если это возможно, но я просто не мог заставить его работать.Вот что я придумал:
Предположим, у меня есть данные для отображения:
val xyExampleData: ObservableBuffer[(Double, Double)] = ObservableBuffer(Seq(
1 -> 1,
2 -> 4,
3 -> 9))
Затем я преобразую это в Серию для LineChart:
val DataPoints = ObservableBuffer(xyExampleData map { case (x, y) => XYChart.Data[Number, Number](x, y) })
val PointsToDisplay = XYChart.Series[Number, Number]("Points", DataPoints)
теперь я снова помещаю это в буфер, может быть, с некоторыми другими данными из другой серии.
val lineChartBuffer = ObservableBuffer(PointsToDisplay, ...)
и, наконец, я создаю свой lineChart, который я называю (с недостатком творчества) lineChart:
val lineChart = new LineChart(xAxis, yAxis, lineChartBuffer) {...}
Теперь можно легко перекрасить линии между точками данных с помощью:
lineChart.lookup(".default-color0.chart-series-line").setStyle("-fx-stroke: blue;")
Это изменит цвет линии набора данных FIRST в LineChartBuffer.Если вы хотите изменить свойства линии для секунды, которую вы называете
lineChart.lookup(".default-color1.chart-series-line")...
Также существует "-fx-stroke-width: 3px;"установить с помощью строки.
"- fx-opacity: 0.1;"
"- fx-stroke-dash-array: 10;"
-fx-fill: blue; "
также полезны, но не вызывайте вышеуказанную строку повторно, потому что второй вызов переопределит первый. Вместо этого объедините все строки в одну:
lineChart.lookup(".default-color0.chart-series-line").setStyle("-fx-stroke: blue;-fx-opacity: 0.1;-fx-stroke-dash-array: 10;-fx-fill: blue;")
Теперь для форматирования символов в каждой точке данных:
, к сожалению, кажется, чтоне иначе, как отдельно отформатировать каждый символ:
lineChart.lookupAll(".default-color0.chart-line-symbol").asScala foreach { node => node.setStyle("-fx-background-color: blue, white;") }
, чтобы запустить его, вам нужно import scala.collection.JavaConverters._
для преобразования из набора Java в набор Scala.
Можно такжесделайте невидимыми все точки данных только из одного набора данных, например:
lineChart.lookupAll(".default-color1.chart-line-symbol").asScala foreach { node => node.setVisible(false) }
Сказать, что это хорошее решение, было бы преувеличено, и у него есть большой недостаток: вам придется перекрашивать или переформатироватькаждый символ после добавления нового Datapoint к одному из рядов в LineChartBuffer. Если вы этого не сделаете, новые символы будут иметь стандартные цвета и настройки. Линии остаются, те, которые перекрашиваются, я не могу сказать, почему.
Но хорошая сторона этого, одинвпоследствии всегда можно переформатировать кривые в линейной диаграмме, как это!