Я создаю информационную панель BI для продаж автомобилей, используя данные, хранящиеся в json. Я хочу, чтобы данные были отфильтрованы для отображения на графиках и в таблице. Графики работали нормально
Вот как данные фильтруются для линейного графика:
private void createLineChart() {
lineChart.getData().clear();
for (CheckBox checkBox : checkBoxes) {
if (checkBox.isSelected()) {
XYChart.Series series = new XYChart.Series();
series.setName(checkBox.getText());
//lambda function to aggregate data
carSales.stream().filter(o -> o.getVehicle().equals(VEHICLE2)).filter(o -> o.getYear().equals(Integer.valueOf(checkBox.getText()))).forEach(o -> {
series.getData().add(new XYChart.Data<>(o.getRegion(), o.getQuantity()));
});
lineChart.getData().add(series);
lineChart.setTitle(VEHICLE2 + " Sales by Region");
}
}
}
Я пробовал аналогичный способ сделать это для таблицы, но он не принимает новый Sales.getYear (). Add line:
private void populateTable(){
year.setCellValueFactory(new PropertyValueFactory<>("Year"));
quarter.setCellValueFactory(new PropertyValueFactory<>("QTR"));
region.setCellValueFactory(new PropertyValueFactory<>("Region"));
vehicle.setCellValueFactory(new PropertyValueFactory<>("Vehicle"));
quantity.setCellValueFactory(new PropertyValueFactory<>("Quantity"));
for (CheckBox checkBox : checkBoxes) {
if (checkBox.isSelected()) {
ObservableList<Sales> oList = FXCollections.observableArrayList(
new Sales.getYear().add("Year", carSales.stream().filter(o -> o.getVehicle().equals(VEHICLE))));
salesTable.setItems(oList);
}
}
}
Флажки определяют, какие данные отображаются в линейном графике, и я хочу, чтобы это были фактические данные из линейного графика, которые будут отображаться в таблице.
Я объявил переменные таблицы и назначил их полям данных в моем классе Sales.java (с получателями), используя setCellValueFactory () выше.
@FXML
private TableView<Sales> salesTable;
@FXML private TableColumn<Sales, Integer> year;
@FXML private TableColumn<Sales, Integer> quarter;
@FXML private TableColumn<Sales, String> region;
@FXML private TableColumn<Sales, Integer> quantity;
@FXML private TableColumn<Sales, String> vehicle;
@Override
public void initialize(URL url, ResourceBundle rb) {
// TODO
dashService = new DashService();
dashService.setAddress("http://150.204.48.59/DashService/SGetSales");
dashService.setOnSucceeded(new EventHandler<WorkerStateEvent>() {
@Override
public void handle(WorkerStateEvent e) {
markup = e.getSource().getValue().toString();
carSales = (new Gson()).fromJson(markup, new TypeToken<LinkedList<Sales>>() {}.getType());
years = carSales.stream().map(o -> o.getYear()).distinct().collect(Collectors.toList());
toggleBW();
displaySales();
Sales2017();
Sales2018();
initClock();
constructCheckBoxes();
}
});
dashService.start();
}
обрабатывать и инициализировать методы выше, как я могу хранить данные в таблице таким образом?