我无法获得条形图或折线图来显示X轴上的所有标签。正如您在提供的打印屏幕中看到的那样,只有最新的数据点显示其标签。
这是在使用场景构建器时。我是否必须为CategoriesAxis提供带字符串的ObservableList?
我已经制作了当前代码的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);
答案 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。这是结果:
向JAVA jira提交的Bug。