Свойство data
для XYChart
содержит ObservableList<XYChart.Series>
.Каждый XYChart.Series
также имеет свойство data
, но содержит ObservableList<XYChart.Data>
.Проблема в том, что ваш метод возвращает ObservableList<XYChart.Data>
, который вы затем пытаетесь установить на XYChart.data
- типы не совпадают.Я не уверен, как вы получаете ClassCastException
, поскольку ваш код даже не должен компилироваться.
Вам нужно свернуть список данных в серии, а затем добавить серию в диаграмму.Вам также следует избегать использования необработанных типов .И Series
, и Data
имеют параметры типа, но вы их не указываете.Исходя из того, как вы строите Data
, ваш код должен выглядеть примерно так (какой-то код для краткости опущен):
public class PerformanceAnalyzerController {
@FXML private BarChart<String, Number> barChart;
@FXML
private void performAnalysisOperation(ActionEvent event) {
//Performing analysis operation
ObservableList<XYChart.Data<String, Number>> data = handler.getItemsGraphicsStatisitics();
XYChart.Series<String, Number> series = new XYChart.Series<>("Series Name", data);
barchart.getData().setAll(series);
graphHandler.getChildren().add(barchart);
}
}
И:
// Use generic types
public ObservableList<XYChart.Data<String, Number>> getItemGraphStatistics(){
ObservableList<XYChart.Data<String, Number>> data = FXCollections.observableArrayList();
String sql = "SELECT itemID, COUNT(*) FROM (SELECT itemID FROM SALES UNION ALL SELECT itemID FROM STOCK) t GROUP BY itemID";
System.out.println(sql );
ResultSet rs = handler.execQuery(sql);
try{
while(rs.next()){
String item= rs.getString("itemID");
int count = rs.getInt(2);
// add diamond operator "<>"
data.add(new XYChart.Data<>(item+ "(" + count + ")", count));
}
} catch (SQLException ex) {
Logger.getLogger(DatabaseHandler.class.getName()).log(Level.SEVERE, null, ex);
}
return data;
}
Примечание: я заменил использование BarChart.Data
на XYChart.Data
, но я не думаю, что это имеет значение в этом случае.