我有一个带数据的TableView,并希望使用PieChart可视化该表中的数据。我不明白我应该如何将TableView的arraylist绑定到Piechart,因为TableView需要getter和setter,而Piechart需要PieChart.Data可观察列表。
这是我当前的代码,这些元素是使用Scene Builder设计的
@FXML
private TableView<Record> tableView;
static ObservableList<Record> dataen
= FXCollections.observableArrayList(
new Record("January", 100),
new Record("February", 200));
public void initialize(URL url, ResourceBundle rb) {
Month.setCellValueFactory(new PropertyValueFactory("fieldMonth"));
Value.setCellValueFactory(new PropertyValueFactory("fieldValue"));
tableView.setItems(dataen);
}
}
在TableView项目列表(数据源)上建立侦听器,或仅对两者使用相同的列表。在这里,他们使用相同的列表。您可以将列表更改为<PieChart.Data>
而不是类型<Record>
,否则可以使用侦听器。
import javafx.application.Application;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.scene.Scene;
import javafx.scene.chart.PieChart;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.cell.PropertyValueFactory;
import javafx.scene.control.cell.TextFieldTableCell;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
import javafx.util.converter.NumberStringConverter;
public class ChangePie extends Application {
@Override
public void start(Stage primaryStage) {
ObservableList<PieChart.Data> pieChartData =
FXCollections.observableArrayList(
new PieChart.Data("Grapefruit", 13),
new PieChart.Data("Oranges", 25),
new PieChart.Data("Plums", 10),
new PieChart.Data("Pears", 22),
new PieChart.Data("Apples", 30));
final PieChart chart = new PieChart(pieChartData);
chart.setTitle("Imported Fruits");
TableView tv = new TableView(pieChartData);
tv.setEditable(true);
TableColumn tc1 = new TableColumn("Name");
tc1.setPrefWidth(100);
tc1.setCellValueFactory(new PropertyValueFactory("name"));
tc1.setCellFactory(TextFieldTableCell.forTableColumn());
TableColumn tc2 = new TableColumn("Data");
tc2.setPrefWidth(100);
tc2.setCellValueFactory(new PropertyValueFactory("pieValue"));
tc2.setCellFactory(TextFieldTableCell.forTableColumn(new NumberStringConverter()));
tv.getColumns().addAll(tc1,tc2);
Scene scene = new Scene(new VBox(chart,tv));
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句