gpt4 book ai didi

java - 从 observableArrayList 到 ObservableArrayList

转载 作者:行者123 更新时间:2023-12-01 12:37:03 24 4
gpt4 key购买 nike

可能我处理这个问题的方法是错误的。但我想以不同的可视化类型可视化表格 View 中的数据,例如饼图和条形图。

如何解决这个问题?例如,我尝试在 PieChart 中使用 observableArrayList,但我无法让它工作。

我目前有:

ObservableList data = FXCollections.observableArrayList();
ObservableList<PieChart.Data> dataList = FXCollections.observableArrayList();

重点是(也是我不使用数据类的原因)是因为用户应该能够选择在 TableView 中获取并可视化的数据。这就是我使用动态行和列的原因。

澄清一下:该应用程序的要点是用户连接到数据库并选择他想要可视化的数据。换句话说,用户在 TableView 中选择两列并单击饼图,然后我希望显示饼图。

最佳答案

PieChart中的数据需要两个属性:名称 ( String ) 和值 ( double )。一个BarChart很相似。

因此,假设您正在使用某种任意数据结构(例如 List<String> )来显示 TableView 中每行中显示的数据。 ,您将需要存储用户对哪一列具有数据名称以及哪一列具有值的选择。

对于 TableView 中的每个元素的项目列表,您需要映射 itemnew PieChart.Data(name, value) ,并使用它们填充 ObservableList<PieChart.Data>传递到PieChart :

int userChosenDataNameColumnIndex ;
int userChosenDataValueColumnIndex ;

// for each List<String> in the table's data:
List<String> rowData ;
String name = rowData.get(userChosenDataNameColumnIndex);
double value = Double.parseDouble(rowData.get(userChosenDataValueColumnIndex));
PieChart.Data pieChartData = new PieChart.Data(name, value);

您可以手动管理这一切:

TableView<List<String>> table = new TableView<>();
ObservableList<List<String>> tableData = loadTableDataFromDatabase();
int userChosenDataNameColumnIndex ;
int userChosenDataValueColumnIndex ;

ObservableList<PieChart.Data> pieChartData = FXCollections.observableArrayList();
for (List<String> rowData : tableData) {
String name = rowData.get(userChosenDataNameColumnIndex);
double value = Double.parseDouble(rowData.get(userChosenDataValueColumnIndex));
pieChartData.add(new PieChart.Data(name, value));
}
PieChart pieChart = new PieChart(pieChartData);

请注意,这只是创建一个饼图,它是表中数据的快照。如果向表中添加行或从表中删除行,饼图将不会更新。您可以使用 EasyBind框架来创建 ObservableList<PieChart.Data>这是表数据的“实时” View :

TableView<List<String>> table = new TableView<>();
ObservableList<List<String>> tableData = loadTableDataFromDatabase();
int userChosenDataNameColumnIndex ;
int userChosenDataValueColumnIndex ;

ObservableList<PieChart.Data> pieChartData = EasyBind.map(tableData, rowData -> {
String name = rowData.get(userChosenDataNameColumnIndex);
double value = Double.parseDouble(rowData.get(userChosenDataValueColumnIndex));
return new PieChart.Data(name, value);
});
PieChart pieChart = new PieChart(pieChartData);

ObservableList<XYChart.Data<String, Number>> barChartData = EasyBind.map(tableData, rowData -> {
String name = rowData.get(userChosenDataNameColumnIndex);
Double value = new Double(rowData.get(userChosenDataValueColumnIndex));
return new XYChart.Data(name, value);
});
BarChart<String, Number> barChart = new BarChart<>(new CategoryAxis(), new NumberAxis(), barChartData)

关于java - 从 observableArrayList 到 ObservableArrayList<PieChart.Data>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25486493/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com