Java FXML应用程序中未更新StackedBarChart

Java FXML应用程序中未更新StackedBarChart,java,javafx-2,bar-chart,fxml,scenebuilder,Java,Javafx 2,Bar Chart,Fxml,Scenebuilder,堆叠条形图不适用于FXML和控制器类。请帮帮我。我的代码如下 控制器类 /* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package javafxapplicat

堆叠条形图不适用于FXML和控制器类。请帮帮我。我的代码如下

控制器类

    /* 
* To change this license header, choose License Headers in Project Properties. 
* To change this template file, choose Tools | Templates 
* and open the template in the editor. 
*/  

package javafxapplication27;  

import java.net.URL;  
import java.util.Arrays;  
import java.util.ResourceBundle;  
import javafx.collections.FXCollections;  
import javafx.collections.ObservableList;  
import javafx.event.ActionEvent;  
import javafx.fxml.FXML;  
import javafx.fxml.Initializable;  
import javafx.scene.chart.BarChart;  
import javafx.scene.chart.CategoryAxis;  
import javafx.scene.chart.NumberAxis;  
import javafx.scene.chart.StackedBarChart;  
import javafx.scene.chart.XYChart;  
import javafx.scene.control.Label;  
import javafx.stage.Stage;  


public class FXMLDocumentController implements Initializable {  

    @FXML  
    private Label label;  

    @FXML  
    private StackedBarChart stackChart;  

    @FXML  
    private BarChart barChart;  

    @FXML  
    private void handleButtonAction(ActionEvent event) {  
        System.out.println("You clicked me!");  
        label.setText("Hello World!");  

    final  String austria   = "Austria";  
    final  String brazil    = "Brazil";  
    final  String france    = "France";  
    final  String italy     = "Italy";  
    final  String usa       = "USA";  
    final CategoryAxis xAxis = new CategoryAxis();  
    final NumberAxis yAxis = new NumberAxis();  
    ObservableList<XYChart.Series<String, Number>> barChartData = FXCollections.observableArrayList();  
    ObservableList<XYChart.Series<String, Number>> stackBarChartData = FXCollections.observableArrayList();  
    final BarChart.Series<String, Number> series1 =  new BarChart.Series<String, Number>();  
    final StackedBarChart.Series<String, Number> series2 =   new StackedBarChart.Series<String, Number>();  
    final StackedBarChart.Series<String, Number> series3 =   new StackedBarChart.Series<String, Number>();  
        series1.setName("2001");  
        series1.getData().add(new XYChart.Data<String, Number>(austria, 25601.34));  
        series1.getData().add(new XYChart.Data<String, Number>(brazil, 20148.82));  
        series1.getData().add(new XYChart.Data<String, Number>(france, 10000));  
        series1.getData().add(new XYChart.Data<String, Number>(italy, 35407.15));  
        series1.getData().add(new XYChart.Data<String, Number>(usa, 12000));  
        series2.setName("2004");  
        series2.getData().add(new XYChart.Data<String, Number>(austria, 57401.85));  
        series2.getData().add(new XYChart.Data<String, Number>(brazil, 41941.19));  
        series2.getData().add(new XYChart.Data<String, Number>(france, 45263.37));  
        series2.getData().add(new XYChart.Data<String, Number>(italy, 117320.16));  
        series2.getData().add(new XYChart.Data<String, Number>(usa, 14845.27));  
        series3.setName("2005");  
        series3.getData().add(new XYChart.Data<String, Number>(austria, 45000.65));  
        series3.getData().add(new XYChart.Data<String, Number>(brazil, 44835.76));  
        series3.getData().add(new XYChart.Data<String, Number>(france, 18722.18));  
        series3.getData().add(new XYChart.Data<String, Number>(italy, 17557.31));  
        series3.getData().add(new XYChart.Data<String, Number>(usa, 92633.68));      

        barChartData.add(series1);  
        stackBarChartData.addAll(series2,series3);  
        stackChart.setData(stackBarChartData);  
        barChart.setData(barChartData);  
    }  

    @Override  
    public void initialize(URL url, ResourceBundle rb) {  
        // TODO  
    }     

}  
/*
*要更改此许可证标题,请在“项目属性”中选择“许可证标题”。
*要更改此模板文件,请选择工具|模板
*然后在编辑器中打开模板。
*/  
包javafxapplication27;
导入java.net.URL;
导入java.util.array;
导入java.util.ResourceBundle;
导入javafx.collections.FXCollections;
导入javafx.collections.ObservableList;
导入javafx.event.ActionEvent;
导入javafx.fxml.fxml;
导入javafx.fxml.Initializable;
导入javafx.scene.chart.BarChart;
导入javafx.scene.chart.CategoryAxis;
导入javafx.scene.chart.NumberAxis;
导入javafx.scene.chart.StackedBarChart;
导入javafx.scene.chart.XYChart;
导入javafx.scene.control.Label;
导入javafx.stage.stage;
公共类FXMLDocumentController实现可初始化的{
@FXML
自有品牌;
@FXML
私人堆叠条形图;
@FXML
私人条形图;
@FXML
私有无效句柄按钮操作(ActionEvent事件){
System.out.println(“你点击了我!”);
label.setText(“你好,世界!”);
最终字符串austria=“austria”;
最后一个字符串巴西=“巴西”;
最终字符串france=“france”;
最终字符串意大利=“意大利”;
最终字符串usa=“usa”;
最终CategoryAxis xAxis=新CategoryAxis();
最终数字axis yAxis=新数字axis();
ObservableList barChartData=FXCollections.observableArrayList();
ObservableList stackBarChartData=FXCollections.observableArrayList();
最终条形图.Series系列1=新的条形图.Series();
最终StackedBarChart.Series系列2=新StackedBarChart.Series();
最终StackedBarChart.Series系列3=新StackedBarChart.Series();
系列1.集合名称(“2001”);
series1.getData().add(新的XYChart.Data(奥地利,25601.34));
series1.getData().add(新的XYChart.Data(巴西,20148.82));
series1.getData().add(新的XYChart.Data(法国,10000));
series1.getData().add(新的XYChart.Data(意大利,35407.15));
series1.getData().add(新的XYChart.Data(美国,12000));
序列2.集合名称(“2004”);
series2.getData().add(新的XYChart.Data(奥地利,57401.85));
series2.getData().add(新的XYChart.Data(巴西,41941.19));
series2.getData().add(新的XYChart.Data(法国,45263.37));
series2.getData().add(新的XYChart.Data(意大利,117320.16));
series2.getData().add(新的XYChart.Data(美国,14845.27));
系列3.集合名称(“2005”);
series3.getData().add(新的XYChart.Data(奥地利,45000.65));
series3.getData().add(新的XYChart.Data(巴西,44835.76));
series3.getData().add(新的XYChart.Data(法国,18722.18));
series3.getData().add(新的XYChart.Data(意大利,17557.31));
series3.getData().add(新的XYChart.Data(美国,92633.68));
barChartData.add(系列1);
stackBarChartData.addAll(系列2、系列3);
setData(stackBarChartData);
设置数据(barChartData);
}  
@凌驾
公共无效初始化(URL,ResourceBundle rb){
//待办事项
}     
}  
FXML文件

    <?xml version="1.0" encoding="UTF-8"?>  

<?import java.lang.*?>  
<?import java.util.*?>  
<?import javafx.scene.*?>  
<?import javafx.scene.chart.*?>  
<?import javafx.scene.control.*?>  
<?import javafx.scene.layout.*?>  

<AnchorPane id="AnchorPane" prefHeight="487.0" prefWidth="610.0" xmlns:fx="http://javafx.com/fxml" fx:controller="javafxapplication27.FXMLDocumentController">  
  <children>  
    <Button fx:id="button" layoutX="14.0" layoutY="14.0" onAction="#handleButtonAction" text="Click Me!" />  
    <Label fx:id="label" layoutX="126.0" layoutY="120.0" minHeight="16.0" minWidth="69.0" />  
    <StackedBarChart fx:id="stackChart" layoutX="20.0" layoutY="33.0" prefHeight="223.0" prefWidth="576.0">  
      <xAxis>  
        <CategoryAxis side="BOTTOM" />  
      </xAxis>  
      <yAxis>  
        <NumberAxis side="LEFT" />  
      </yAxis>  
    </StackedBarChart>  
    <BarChart fx:id="barChart" layoutX="30.0" layoutY="264.0" prefHeight="216.0" prefWidth="552.0">  
      <xAxis>  
        <CategoryAxis side="BOTTOM" />  
      </xAxis>  
      <yAxis>  
        <NumberAxis side="LEFT" />  
      </yAxis>  
    </BarChart>  
  </children>  
</AnchorPane>  

当我运行这个程序时,只有条形图填充,堆叠条形图不显示任何图形

输出窗口


请帮我解决这个问题

从oracle OTN论坛上得到了答案,由mr

根据本文,您需要执行以下操作:

((CategoryAxis)stackChart.getXAxis()).setCategories(FXCollections.<String>observableArrayList(Arrays.asList(austria, brazil, france, italy, usa)));  
对我来说,它解决了这个问题

((CategoryAxis)stackChart.getXAxis()).getCategories().setAll(austria, brazil, france, italy, usa);