如何在javafx中创建每个系列中包含一个元素(Bar)的BarChar

如何在javafx中创建每个系列中包含一个元素(Bar)的BarChar,javafx,Javafx,我创建了一个条字符,但是条之间有一个很大的间隙(我认为这是因为我在每个系列中使用一个元素)。我尝试了setBarGap(),但它没有改变任何事情。我是这样做的:?下面是我想要的一个例子: observeList answer=FXCollections.observearraylist(); 对于(int i=1;i而言,问题在于为所有数据系列添加多个类别。如果一个数据系列名为“1”,另一个数据系列名为“2”,并且这些数据系列被添加到不同的系列中,则布局需要在每个类别的栏组中为缺少的类别节省空间

我创建了一个条字符,但是条之间有一个很大的间隙(我认为这是因为我在每个系列中使用一个元素)。我尝试了setBarGap(),但它没有改变任何事情。我是这样做的:?下面是我想要的一个例子:

observeList answer=FXCollections.observearraylist();

对于(int i=1;i而言,问题在于为所有数据系列添加多个类别。如果一个数据系列名为“1”,另一个数据系列名为“2”,并且这些数据系列被添加到不同的系列中,则布局需要在每个类别的栏组中为缺少的类别节省空间。就像“2”组中有一个空格用于“1”酒吧,但你没有添加任何

请确保您永远不要添加多个类别-它们都必须具有相同的值。因为您似乎使用不同的颜色和图例系列,所以不要命名类别

import javafx.application.Application;
import javafx.collections.FXCollections;
import javafx.geometry.Side;
import javafx.scene.Scene;
import javafx.scene.chart.BarChart;
import javafx.scene.chart.CategoryAxis;
import javafx.scene.chart.NumberAxis;
import javafx.scene.chart.XYChart;
import javafx.stage.Stage;

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(xAxis,yAxis);
        bc.setTitle("Frequency of visit");
        bc.setLegendSide(Side.RIGHT);
        //if you want axis labels
        xAxis.setLabel("");       
        yAxis.setLabel("");

        bc.getData().addAll(makeSerie("daily",20),
                            makeSerie("twice a week",30),
                            makeSerie("weekly",40),
                            makeSerie("monthly",50));

        xAxis.setVisible(false);
        xAxis.setTickMarkVisible(false);
        xAxis.setTickLabelsVisible(false);
        bc.setBarGap(20);

        Scene scene  = new Scene(bc);
        stage.setScene(scene);
        stage.show();
    }

    //just to save typing
    private XYChart.Series<String, Number> makeSerie(String name, Number value){
        return new XYChart.Series(name,
                FXCollections.observableArrayList(new XYChart.Data("", value)));
   }

    public static void main(String[] args) {
        launch(args);
    }
}
导入javafx.application.application;
导入javafx.collections.FXCollections;
导入javafx.geometry.Side;
导入javafx.scene.scene;
导入javafx.scene.chart.BarChart;
导入javafx.scene.chart.CategoryAxis;
导入javafx.scene.chart.NumberAxis;
导入javafx.scene.chart.XYChart;
导入javafx.stage.stage;
公共类BarChartSample扩展了应用程序{
@覆盖公共无效开始(阶段){
阶段。设置标题(“条形图样本”);
最终CategoryAxis xAxis=新CategoryAxis();
最终数字axis yAxis=新数字axis();
最终条形图bc=新条形图(xAxis,yAxis);
bc.setTitle(“访问频率”);
公元前3世纪setLegendSide(右侧);
//如果需要轴标签
xAxis.setLabel(“”);
yAxis.setLabel(“”);
bc.getData().addAll(makeSerie(“每日”,20),
makeSerie(“每周两次”,30),
makeSerie(“每周”,40),
makeSerie(“每月”,50));
xAxis.setVisible(假);
xAxis.setTickMarkVisible(false);
xAxis.setTickLabelsVisible(假);
bc.setBarGap(20);
场景=新场景(bc);
舞台场景;
stage.show();
}
//只是为了省去打字
私有XYChart.Series makeSerie(字符串名称、数字值){
返回新的XYChart.Series(名称,
FXCollections.observearraylist(新的XYChart.Data(“,value));
}
公共静态void main(字符串[]args){
发射(args);
}
}

冷静下来。我会开始的。不要删除你的问题并重新提问,编辑它以使其更易于回答。如果你必须知道,我没有尝试过,因为你没有发布任何代码。即使你不想发布代码,也要发布代码,这样我就不必为了修复它而键入太多。我只是没有时间为你这么做。比我想我看到了你的问题,你为类别添加了多个具有不同值的系列(1->>8)。这行不通,也许可以解释一下你试图通过使用多个系列来实现什么。我认为该系列是为了让你可以得到一个图例,但如果它只是针对不同的颜色,那么你可以在css中设置每个条的样式。不,它不是针对不同的颜色,而是针对不同的值(每个系列有1个值),这是我尝试做的一个例子:我知道这个样本,但这不是我想做的。在这个例子中,相同的值(奥地利)被归因于不同的系列(1,2,3)。但我想归因于不同的值(奥地利,法国,美国)的系列(1,2,3).如果我这样做,我会得到以下结果:你不能那样做。就像我提到的,你试图用系列来表示颜色和图例。因此,请命名系列而不是数据
import javafx.application.Application;
import javafx.collections.FXCollections;
import javafx.geometry.Side;
import javafx.scene.Scene;
import javafx.scene.chart.BarChart;
import javafx.scene.chart.CategoryAxis;
import javafx.scene.chart.NumberAxis;
import javafx.scene.chart.XYChart;
import javafx.stage.Stage;

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(xAxis,yAxis);
        bc.setTitle("Frequency of visit");
        bc.setLegendSide(Side.RIGHT);
        //if you want axis labels
        xAxis.setLabel("");       
        yAxis.setLabel("");

        bc.getData().addAll(makeSerie("daily",20),
                            makeSerie("twice a week",30),
                            makeSerie("weekly",40),
                            makeSerie("monthly",50));

        xAxis.setVisible(false);
        xAxis.setTickMarkVisible(false);
        xAxis.setTickLabelsVisible(false);
        bc.setBarGap(20);

        Scene scene  = new Scene(bc);
        stage.setScene(scene);
        stage.show();
    }

    //just to save typing
    private XYChart.Series<String, Number> makeSerie(String name, Number value){
        return new XYChart.Series(name,
                FXCollections.observableArrayList(new XYChart.Data("", value)));
   }

    public static void main(String[] args) {
        launch(args);
    }
}