任务
我必须使用JavaFX创建一个分为多个部分的条形图,其中每个部分代表一种类型的数据。一些CheckBox允许用户选择他想要显示的数据类型。
我使用了StackedBarChart,当我隐藏所有标记时,它看起来就像我想要的那样。
但是,当我更改数据时,我需要将其设置为动画。
问题
我想修改条形图的大小,所以我将上限设置为100,然后我做了一些数学运算来按百分比分割我的数据。它有效,但通过这样做,我的图表有一个固定的范围,由于这个固定的范围,我已经失去了图表的自动动画。
我需要的动画是,当我删除或添加一种数据时,子栏会逐渐增长以填充空白区域或减少以显示新的子栏。
我已经尝试在每次更改时清除我的图表,但我得到的动画并不是我想要的。
这是我的酒吧的FXML(我也尝试将自动调整设置为true,但没有结果,这是正常的,因为我的范围无论如何都是固定的):
hashCode()
这是我将数据放入图表的Java代码
<StackedBarChart fx:id="stackedBar"
horizontalGridLinesVisible="false" horizontalZeroLineVisible="false"
verticalGridLinesVisible="false" verticalZeroLineVisible="false"
legendVisible="false"
minHeight="20" maxHeight="100"
>
<xAxis>
<NumberAxis fx:id="xAxis" side="BOTTOM" autoRanging="false" lowerBound="0" opacity="0"/>
</xAxis>
<yAxis>
<CategoryAxis side="LEFT" opacity="0" />
</yAxis>
</StackedBarChart>
提前谢谢!抱歉我的英语,我不是母语人士^^&#39;
答案 0 :(得分:0)
我终于得到了它:我只需要修改图表中已有的数据,而不是像我一样重置它。
现在看起来像这样:
if (stackedBar.getData().isEmpty())
{
ObservableList<XYChart.Series<Number, String>> stackedBarData = FXCollections.observableArrayList();
StackedBarChart.Series<Number, String> serie1 = new StackedBarChart.Series<Number, String>();
serie1.setName(strNouvelle);
serie1.getData().add(new XYChart.Data<Number, String>(pourcentageNouvelle, "actions"));
StackedBarChart.Series<Number, String> serie2 = new StackedBarChart.Series<Number, String>();
serie2.setName(strEnCours);
serie2.getData().add(new XYChart.Data<Number, String>(pourcentageEnCours, "actions"));
StackedBarChart.Series<Number, String> serie3 = new StackedBarChart.Series<Number, String>();
serie3.setName(strTermine);
serie3.getData().add(new XYChart.Data<Number, String>(pourcentageTermine, "actions"));
StackedBarChart.Series<Number, String> serie4 = new StackedBarChart.Series<Number, String>();
serie4.setName(strRefuse);
serie4.getData().add(new XYChart.Data<Number, String>(pourcentageRefuse, "actions"));
StackedBarChart.Series<Number, String> serie5 = new StackedBarChart.Series<Number, String>();
serie5.setName(strHorsDelais);
serie5.getData().add(new XYChart.Data<Number, String>(pourcentageHorsDelais, "actions"));
stackedBarData.addAll(serie1,serie2, serie3, serie4, serie5);
stackedBar.setData(stackedBarData);
}
else
{
((StackedBarChart.Series<Number, String>)stackedBar.getData().get(0)).getData().set(0, new XYChart.Data<Number, String>(pourcentageNouvelle, "actions"));
((StackedBarChart.Series<Number, String>)stackedBar.getData().get(1)).getData().set(0, new XYChart.Data<Number, String>(pourcentageEnCours, "actions"));
((StackedBarChart.Series<Number, String>)stackedBar.getData().get(2)).getData().set(0, new XYChart.Data<Number, String>(pourcentageTermine, "actions"));
((StackedBarChart.Series<Number, String>)stackedBar.getData().get(3)).getData().set(0, new XYChart.Data<Number, String>(pourcentageRefuse, "actions"));
((StackedBarChart.Series<Number, String>)stackedBar.getData().get(4)).getData().set(0, new XYChart.Data<Number, String>(pourcentageHorsDelais, "actions"));
}