如何在条形图javafx顶部显示条形图值

如何在条形图javafx顶部显示条形图值,java,javafx-2,bar-chart,Java,Javafx 2,Bar Chart,根据这段代码,我可以生成10条条形图,现在我想知道如何在条形图顶部显示每个条形图的值,如所附图像: 以下是代码: public class BarChartSample extends Application { @Override public void start(Stage stage) { stage.setTitle("Bar Chart Sample"); final CategoryAxis xAxis = new CategoryAxi

根据这段代码,我可以生成10条条形图,现在我想知道如何在条形图顶部显示每个条形图的值,如所附图像:

以下是代码:

public class BarChartSample extends Application {


    @Override public void start(Stage stage) {
        stage.setTitle("Bar Chart Sample");
        final CategoryAxis xAxis = new CategoryAxis();
        final NumberAxis yAxis = new NumberAxis();
        final BarChart<String,Number> bc = 
            new BarChart<String,Number>(xAxis,yAxis);
        bc.setTitle("Country Summary");
        xAxis.setLabel("bars");       
        yAxis.setLabel("Value");

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

for(int i=0;i<10;i++)
{
   //here i want to change color of bar if value of i is >5 than red if i>8 than blue 
series1.getData().add(new XYChart.Data("Value", i));

}          

}

public static void main(String[] args) {
        launch(args);
    }
}
公共类BarChartSample扩展应用程序{
@覆盖公共无效开始(阶段){
阶段。设置标题(“条形图样本”);
最终CategoryAxis xAxis=新CategoryAxis();
最终数字axis yAxis=新数字axis();
最终条形图bc=
新柱状图(xAxis、yAxis);
bc.setTitle(“国家概要”);
xAxis.setLabel(“条”);
yAxis.setLabel(“值”);
XYChart.Series系列1=新的XYChart.Series();
序列1.集合名(“…”);
对于(int i=0;如果i>8,则i5比蓝色小
series1.getData().add(新的XYChart.Data(“Value”,i));
}          
}
公共静态void main(字符串[]args){
发射(args);
}
}

JFX中没有关于在条形图中为条形图显示标签的选项

您可以做的是扩展条形图类,并重写有关内容创建和分配的方法

您可以在JavaFXUICharts项目中观察图表代码,您可以从OpenJFX存储库下载该项目

图表代码不难理解

从下载rt存储库


查找project javafx ui图表并打开它。查找条形图的实现。

ChangeListener
中,对于每个数据项的
节点
属性,可以调用以下函数将标签添加到条形图的顶部:

private void displayLabelForData(XYChart.Data<String, Number> data) {
  final Node node = data.getNode();
  final Text dataText = new Text(data.getYValue() + "");
  node.parentProperty().addListener(new ChangeListener<Parent>() {
    @Override public void changed(ObservableValue<? extends Parent> ov, Parent oldParent, Parent parent) {
      Group parentGroup = (Group) parent;
      parentGroup.getChildren().add(dataText);
    }
  });

  node.boundsInParentProperty().addListener(new ChangeListener<Bounds>() {
    @Override public void changed(ObservableValue<? extends Bounds> ov, Bounds oldBounds, Bounds bounds) {
      dataText.setLayoutX(
        Math.round(
          bounds.getMinX() + bounds.getWidth() / 2 - dataText.prefWidth(-1) / 2
        )
      );
      dataText.setLayoutY(
        Math.round(
          bounds.getMinY() - dataText.prefHeight(-1) * 0.5
        )
      );
    }
  });
}
private void displaybelfordata(XYChart.Data){
最终节点=data.getNode();
final Text dataText=新文本(data.getYValue()+);
node.parentProperty().addListener(新的ChangeListener()){

@Override public void changed(ObservableValuei已搜索allot,但运气不佳,您能否提供一个示例,或者是否可以编辑我的代码..感谢您的Intrest在编译代码时,它给出了错误“”,最终条形图bc=新条形图(xAxis,yAxis)时,源代码级别低于1.7时不允许使用“”运算符;代码是使用为Java 7编写的。您可以将编译器设置为至少接受Java 7源代码(选项
-source 7
),或将语句更改为
BarChart bc=new BarChart(xAxis,yAxis);
,它与Java 6源代码兼容。请注意,即使您使用的是jdk7+,也可能是针对低于7的源代码级别进行编译。@jewelsea在StackedBarChart@khaled我猜想使用StackedBarChart进行此操作与标准BarChart相同,如果不是,则记录一个特定于Stack的新问题edBarCharts,它解释了您尝试的内容和不起作用的内容