gpt4 book ai didi

javafx - 条形图的限制宽度大小

转载 作者:行者123 更新时间:2023-12-02 21:20:24 24 4
gpt4 key购买 nike

我创建了条形图的简单示例,但我注意到条形的大小适合图表。我如何限制大小?敌人的例子我想限制宽度大小。

enter image description here

最佳答案

正如我们已经讨论过的here ,要在每个条上设置最大宽度,我们必须相应地更改 barGapcategoryGap,每次调整场景或图表大小时。

与引用问题的唯一区别是我们必须在第一次显示时调整图表的大小。

基于相同的代码,让我们创建 setMaxBarWidth() 方法:

private final NumberAxis yAxis = new NumberAxis();
private final CategoryAxis xAxis = new CategoryAxis();
private final BarChart<String,Number> bc = new BarChart<>(xAxis,yAxis);

private void setMaxBarWidth(double maxBarWidth, double minCategoryGap){
double barWidth=0;
do{
double catSpace = xAxis.getCategorySpacing();
double avilableBarSpace = catSpace - (bc.getCategoryGap() + bc.getBarGap());
barWidth = (avilableBarSpace / bc.getData().size()) - bc.getBarGap();
if (barWidth >maxBarWidth){
avilableBarSpace=(maxBarWidth + bc.getBarGap())* bc.getData().size();
bc.setCategoryGap(catSpace-avilableBarSpace-bc.getBarGap());
}
} while(barWidth>maxBarWidth);

do{
double catSpace = xAxis.getCategorySpacing();
double avilableBarSpace = catSpace - (minCategoryGap + bc.getBarGap());
barWidth = Math.min(maxBarWidth, (avilableBarSpace / bc.getData().size()) - bc.getBarGap());
avilableBarSpace=(barWidth + bc.getBarGap())* bc.getData().size();
bc.setCategoryGap(catSpace-avilableBarSpace-bc.getBarGap());
} while(barWidth < maxBarWidth && bc.getCategoryGap()>minCategoryGap);
}

现在创建您的图片的图表,但宽度为 40 像素:

@Override 
public void start(Stage stage) {
bc.setTitle("1");
xAxis.setLabel("Groups");
yAxis.setLabel("Value");

XYChart.Series series1 = new XYChart.Series();
series1.setName("Groups");
series1.getData().add(new XYChart.Data("kk", 1));

Scene scene = new Scene(bc,800,600);
bc.getData().addAll(series1);
stage.setScene(scene);
stage.show();

setMaxBarWidth(40, 10);
bc.widthProperty().addListener((obs,b,b1)->{
Platform.runLater(()->setMaxBarWidth(40, 10));
});
}

chart

编辑

我已经用 Platform.runLater() 包装了对 setMaxBarWidth() 的调用,因此场景图有时间正确刷新图表,避免了多次重绘while 循环。此外,我已将监听器移至 bc.widthProperty(),以防图表嵌入其他容器中。

关于javafx - 条形图的限制宽度大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28047818/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com