[英]How can I update JavaFX BarChart in Swing application?
我想更新一个JavaFX BarChart。 我使用以下方法初始化BarChart:
private void initFxComponents(String questionName){
Platform.runLater(() -> {
final CategoryAxis xAxis = new CategoryAxis();
final NumberAxis yAxis = new NumberAxis();
final BarChart<String, Number> barChart = new BarChart<>(xAxis,yAxis);
barChart.setTitle(questionName);
barChart.setLegendVisible(false);
xAxis.setLabel("Answer");
yAxis.setLabel("Number of times answered");
series = new Series();
int nbAnswersForProposal;
String proposal;
for(Proposal p : question.getListProposals()){
nbAnswersForProposal = Answers.getInstance().getNbAnswersForProposal(quiz.getId(), question.getId(), p.getId());
proposal = p.getProposal();
StringBuilder sb = new StringBuilder(proposal);
int i = 0;
while ((i = sb.indexOf(" ", i + 30)) != -1)
sb.replace(i, i + 1, "\n");
series.getData().add(new Data(sb.toString(), nbAnswersForProposal));
}
Scene scene = new Scene(barChart,800,800);
barChart.getData().addAll(series);
fxPanel.setScene(scene);
});
}
我使用这种方法来更新数据:
public void updateData(){
Platform.runLater(() -> {
series.getData().clear();
int nbAnswersForProposal;
String proposal;
for(Proposal p : question.getListProposals()){
nbAnswersForProposal = Answers.getInstance().getNbAnswersForProposal(quiz.getId(), question.getId(), p.getId());
proposal = p.getProposal();
StringBuilder sb = new StringBuilder(proposal);
int i = 0;
while ((i = sb.indexOf(" ", i + 30)) != -1)
sb.replace(i, i + 1, "\n");
series.getData().add(new Data(sb.toString(), nbAnswersForProposal));
}
});
}
但是,当我更新数据时,BarChart是错误的,并且无法正确显示数据。 我认为我没有做正确的事情来更新我的BarChart,有人可以帮助我吗? 谢谢 !
好的,我找到了解决问题的方法。 显然,该动画导致数据无法正确显示并中断自动调整大小。
因此,只需添加: barChart.setAnimated(false);
您将不再有动画,但是它将解决问题。
我也更新了这个:
private final Series series = new Series();
...
series.getData().add(new Data(sb.toString(), nbAnswersForProposal));
...
barChart.getData().addAll(series);
这样:
private final XYChart.Series<String, Number> series = new XYChart.Series<>();
...
series.getData().add(new XYChart.Data(sb.toString(), nbAnswersForProposal));
...
barChart.setData(FXCollections.observableArrayList(series));
public void updateData(){
// You need to run it in thread
Platform.runLater(() -> {
// Update chart's name
barChart.setTitle(questionName);
// Remove all data
series.getData().clear();
// Add as many data as you want
series.getData().add(new XYChart.Data("xData", yValue));
});
}
就我而言,我需要删除数据并添加新数据。 但是,如果您的x值不变,您也可以更新值(y值)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.