我正在使用存储在json中的数据创建用于汽车销售的BI仪表板。我希望过滤数据以显示在图表和表格中。图表运行良好
这是折线图数据的过滤方式:
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行:
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);
}
}
}
复选框确定折线图中显示哪些数据,我希望它是折线图中要显示在表中的实际数据。
我已经声明了表变量,并使用上面的setCellValueFactory()将它们分配给我的Sales.java类(带有吸气剂)中的数据字段。
@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();
}
上面的处理和初始化方法,如何用这种方式将数据存储在表中?