BarChart / LineChart - 仅显示最后一个数据点的标签

时间:2014-10-14 13:57:39

标签: javafx linechart

我无法获得条形图或折线图来显示X轴上的所有标签。正如您在提供的打印屏幕中看到的那样,只有最新的数据点显示其标签。

这是在使用场景构建器时。我是否必须为CategoriesAxis提供带字符串的ObservableList?

enter image description here

我已经制作了当前代码的MVCE:

@FXML
LineChart<String, Integer> lineChart;
@FXML
private Label label;

@FXML
private void handleButtonAction(ActionEvent event) {

XYChart.Series series1 = new XYChart.Series();

series1.getData().add(new XYChart.Data<String, Integer>("austria", 300));
series1.getData().add(new XYChart.Data<String, Integer>("rr", 400));
series1.getData().add(new XYChart.Data<String, Integer>("qq", 3003));
lineChart.getData().addAll(series1);

2 个答案:

答案 0 :(得分:2)

使用您的方法,每次单击按钮时,新图表都会添加到图表中,并始终使用相同的数据。请注意,对于第二个系列,您将获得所有标签......

如果您已经指出了一个系列,只有一个系列,并且有正确的标签,请创建全局ObservableList,在系列的开头添加它,然后在{{1}上添加将系列添加到图表中。

然后,如果您要处理点击事件,只需在系列中添加新值,您就会看到新标签也会被添加。

Initialize

修改

如果您想在每次点击按钮时添加新系列,可以按照最初的建议进行。

但请注意,它似乎是第一个系列中的一个错误,只显示最后一个标签,如果图表是动画的。为了避免这个错误(考虑将其归档到JIRA),只需禁用动画即可。

如果你想要动画,可以在图表中添加一个监听器,并在它至少有一个系列时设置动画。这将有效:

@FXML private LineChart<String, Integer> lineChart;

private final ObservableList<XYChart.Data<String,Integer>> xyList1 = 
            FXCollections.observableArrayList(
                    new XYChart.Data<>("austria", 300),
                    new XYChart.Data<>("rr", 400),
                    new XYChart.Data<>("qq", 3003));

private final XYChart.Series series1 = new XYChart.Series(xyList1);

@Override
public void initialize(URL url, ResourceBundle rb) {
    series1.setName("Name");
    lineChart.getData().addAll(series1);
}    

@FXML
public void handleButtonAction(ActionEvent e){
    // sample new points
    series1.getData().add(new XYChart.Data<>("Point "+(series1.getData().size()+1), 
            new Random().nextInt(3000)));
}

答案 1 :(得分:0)

这是j8_u20中的错误。在Java Chat的人们的帮助下,我们已经测试了u20,u25和u11。这是结果:

  • U25错误可见
  • U20错误可见
  • U11错误不可见

向JAVA jira提交的Bug。