更新数据时,Javafx条形图X轴无法正确缩放
我正在尝试使用Javafx实现一个条形图。如果我只绘制一次数据,图表工作正常。但当我更新数据并重新绘制图表时,X轴比例保持不变,而所有数据都正确更新。请检查以下图片 这是按周绘制数据的正确图表 当我更新数据时,图表会变成 您可以看到数据已更新,但X轴未正确缩放。有趣的是,当我在不改变数据的情况下再次绘制图表时,X轴变得像这样正常 代码如下:更新数据时,Javafx条形图X轴无法正确缩放,java,javafx,bar-chart,Java,Javafx,Bar Chart,我正在尝试使用Javafx实现一个条形图。如果我只绘制一次数据,图表工作正常。但当我更新数据并重新绘制图表时,X轴比例保持不变,而所有数据都正确更新。请检查以下图片 这是按周绘制数据的正确图表 当我更新数据时,图表会变成 您可以看到数据已更新,但X轴未正确缩放。有趣的是,当我在不改变数据的情况下再次绘制图表时,X轴变得像这样正常 代码如下: private static void drawChart(int timeMode) { stayAvg = new XYChart.Ser
private static void drawChart(int timeMode)
{
stayAvg = new XYChart.Series<String, Number>();
stayAvg.setName("Avg.Stay (mins)");
// add data to the dataset
if (timeMode == 1)
{
for (int i = firstWeek; i <= lastWeek; i++)
{
stayAvg.getData().add(new XYChart.Data<String, Number>(weeks[i], weeksTotalCount[i]));
}
}
else if (timeMode == 2)
{
for (int i = firstMonth; i <= lastMonth; i++)
{
stayAvg.getData().add(new XYChart.Data<String, Number>(months[i], monthsTotalCount[i]));
}
}
// display chart
Platform.runLater(new Runnable() {
@Override
public void run() {
// plot data sets to the chart
// Update UI here.
// set up tooltips when cursor hovers on bars
sbc.setData(FXCollections.observableArrayList(stayAvg));
stayAvg.getData().forEach(d -> {
Tooltip tip = new Tooltip();
tip.setText(d.getYValue() + "\n" + d.getXValue());
Tooltip.install(d.getNode(), tip);
});
// sbc is a StackedBarChart
sbc.setTitle("Average Stay");
chart.setScene(scene);
}
});
}
private静态无效绘图图(int-timeMode)
{
stayAvg=new XYChart.Series();
stayAvg.setName(“平均停留时间(分钟)”);
//向数据集添加数据
如果(时间模式==1)
{
对于(int i=firstWeek;i您是否尝试过在每次绘制时不设置数据:
sbc.setData(FXCollections.observableArrayList(stayAvg));
而是做:
private static void drawChart(int timeMode)
{
sbc.getData().clear();
// add data to the dataset
if (timeMode == 1)
{
for (int i = firstWeek; i <= lastWeek; i++)
{
stayAvg.getData().add(new XYChart.Data<String, Number>(weeks[i], weeksTotalCount[i]));
}
}
else if (timeMode == 2)
{
for (int i = firstMonth; i <= lastMonth; i++)
{
stayAvg.getData().add(new XYChart.Data<String, Number>(months[i], monthsTotalCount[i]));
}
}
private静态无效绘图图(int-timeMode)
{
sbc.getData().clear();
//向数据集添加数据
如果(时间模式==1)
{
对于(int i=firstWeek;i您可以尝试禁用条形图的动画:
chart.setAnimated(false);
这将阻止条形图更新之间看似“平滑”的过渡,从而防止出现诸如过度拥挤的条形标签等意外的视觉错误
这是从问题中得到的启发,在我的案例中起作用。首先,启用图表动画。最后禁用聊天动画
lineChart.getData().clear();
lineChart.setAnimated(true);// enable animation
XYChart.Series series = new XYChart.Series();
String query = "SELECT time, total_purchase FROM sales WHERE date = '"+
text.getText() +"'";
con = new Connector().connector();
pst = con.prepareStatement(query);
ResultSet rs = pst.executeQuery();
rs.beforeFirst();
while(rs.next()){
String time = rs.getString(rs.findColumn("time"));
float purchase = rs.getFloat(rs.findColumn("total_purchase"));
series.getData().add(new XYChart.Data(time, purchase));
}
lineChart.getData().addAll(series);
lineChart.setAnimated(false);// disable animation
1) 这与Swing有什么关系?2)请学习常见的Java命名法(命名约定-例如EachWordUpperCaseClass
,firstWordLowerCaseMethod()
,firstWordLowerCaseAttribute
,除非它是大写常量
)并始终如一地使用它。谢谢Andrew,我以前没有注意Java术语。我会编辑代码。谢谢你的回答,但它不起作用。如果不调用setData,图表中就不会有任何内容。