2017-10-18 10 views
0
I 라인 차트 코드의 샘플 작업입니다

에 선 차트를 만들 :Scalafx : 스칼라

import scalafx.application.JFXApp 
    import scalafx.stage.Stage 
    import scalafx.scene.Scene 
    import scalafx.scene.chart.{LineChart,NumberAxis, XYChart} 
    import scalafx.collections.ObservableBuffer 
    import scalafx.scene.chart.XYChart.Series 



    object LineChartSample extends JFXApp { 

    // Defining the axes 
    val xAxis = new NumberAxis() 
    xAxis.label = "Number of Month" 
    val yAxis = new NumberAxis() 

    // Creating the chart 
    val lineChart = LineChart(xAxis,yAxis) 
    //val lineChart: LineChart[NumberAxis, NumberAxis] = _ 

    lineChart.title = "Stock Monitoring, 2010" 

    // defining a series 
    val data = ObservableBuffer(Seq(
     (1, 23), 
     (2, 14), 
     (3, 15), 
     (4, 24), 
     (5, 34), 
     (6, 36), 
     (7, 22), 
     (8, 45), 
     (9, 43), 
     (10, 17), 
     (11, 29), 
     (12, 25) 
    ) map {case (x, y) => XYChart.Data[Number, Number](x, y)}).delegate 

    val series = XYChart.Series[Number,Number]("test",data) 




    lineChart.getData.add(series) 

    val stg = new Stage { 
     title = "Line Chart Sample" 
     scene = new Scene(800, 600) { 
     root = lineChart 
     } 
    } 
    } 

그것은 시리즈의 코드 행 아래에 강조 표시 오류와 함께 실패하는 것은

val series = XYChart.Series[Number,Number]("test",data) 


Error:(41, 30) overloaded method value apply with alternatives: 
    (name: String,data: scalafx.collections.ObservableBuffer[javafx.scene.chart.XYChart.Data[Number,Number]])javafx.scene.chart.XYChart.Series[Number,Number] <and> 
    (data: scalafx.collections.ObservableBuffer[javafx.scene.chart.XYChart.Data[Number,Number]])javafx.scene.chart.XYChart.Series[Number,Number] 
cannot be applied to (String, javafx.collections.ObservableList[javafx.scene.chart.XYChart.Data[Number,Number]]) 
    val series = XYChart.Series[Number,Number]("test",data) 

는 누군가가 날 포인트 그게 뭐가 잘못 됐니? 오류를 제대로 이해할 수 없습니다.

+0

메시지는 당신이 쉽게 그것을 처리 할 수있는 방법에'ObservableList'를 전달하는 말을한다. 'data' 값을 만들 때, 당신은리스트를 구성하고 있으며, 아마도 ObservableBuffer'로 다시 변환되어야합니다. –

답변

1

나는 여기에 문제가 자바 FXObservableListdata을 변경하는 ObservableBuffer 선언의 끝 부분에있는 .delegate 변환을 사용하는 것입니다 생각합니다.

ObservableBuffer (ScalaFX의 일부)는 자바 FX ObservableList 컬렉션 클래스에 상응하는 것으로 선언된다. ObservableList에서 ObservableBuffer에 암시 적 변환이 있습니다 (I 그것이 List 스칼라. 에서 구성하는 것과 혼동을 피하기 위해 ScalaFX에 개명되었다 생각), 그러나 당신은 당신의 수입 중 import scalafx.Includes._ (추천)을 포함하지 않았습니다. 결과적으로 data이 예상 인수 유형 XYChart.Series.apply(String, ObservableBuffer)과 일치하지 않으므로 오류가 발생합니다. .delegate 호출을 생략하면 코드가 단순 해지고 암시 적 변환이 필요하지 않습니다. 또는 코드에 import 문을 추가하면됩니다.

그러나 프로그램을 실행하려면 stage 구성원 인 JFXApp을 새 PrimaryStage에 할당해야합니다. 다음 작품 :

import scalafx.application.JFXApp 
import scalafx.application.JFXApp.PrimaryStage 
import scalafx.scene.Scene 
import scalafx.scene.chart.{LineChart, NumberAxis, XYChart} 
import scalafx.collections.ObservableBuffer 

object LineChartSample 
extends JFXApp { 

    // Defining the axes 
    val xAxis = new NumberAxis() 
    xAxis.label = "Number of Month" 
    val yAxis = new NumberAxis() 

    // Creating the chart 
    val lineChart = LineChart(xAxis, yAxis) 

    lineChart.title = "Stock Monitoring, 2010" 

    // defining a series 
    val data = ObservableBuffer(Seq(
    (1, 23), 
    (2, 14), 
    (3, 15), 
    (4, 24), 
    (5, 34), 
    (6, 36), 
    (7, 22), 
    (8, 45), 
    (9, 43), 
    (10, 17), 
    (11, 29), 
    (12, 25) 
) map {case (x, y) => XYChart.Data[Number, Number](x, y)}) 

    val series = XYChart.Series[Number, Number]("test", data) 

    lineChart.getData.add(series) 

    stage = new PrimaryStage { 
    title = "Line Chart Sample" 
    scene = new Scene(800, 600) { 
     root = lineChart 
    } 
    } 
}