gpt4 book ai didi

JavaFX 将 BarChart xAxis/width 设置为大小

转载 作者:行者123 更新时间:2023-12-02 08:58:09 26 4
gpt4 key购买 nike

我想强制条形图的 X 大小,但不能。有办法实现吗?也许通过覆盖 BarChart 中的函数?

import com.milkyway.trader.missionControl.OptionHistorySingleton;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.chart.*;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

public class SetBarChartBarSizeExample extends Application {

VBox root = new VBox();

@Override
public void start(Stage primaryStage) throws Exception {
CategoryAxis xAxis = new CategoryAxis();
NumberAxis yAxis = new NumberAxis();

BarChart<String, Number> chart = new BarChart<>(xAxis,yAxis);
chart.setLegendVisible(false);
root.getChildren().add(chart);


chart.setBarGap(5);
chart.setCategoryGap(0);

// Doesn't work.
//xAxis.maxWidthProperty().bind(root.widthProperty());
xAxis.setMaxWidth(20);
chart.setMaxWidth(20);



XYChart.Series series1 = new XYChart.Series();
XYChart.Data barA = new XYChart.Data("A", 100);
XYChart.Data barB = new XYChart.Data("B", -100);
series1.getData().addAll(barA, barB);

chart.getData().addAll(series1);


Scene scene = new Scene(root, 400, 200);
primaryStage.setScene(scene);
primaryStage.setHeight(600);
primaryStage.setWidth(400);
primaryStage.show();
}

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

最佳答案

默认情况下,图表的最小宽度是根据条形数量、显示每个条形所需的最小宽度、显示 y 轴所需的最小宽度以及其他设置,例如填充和边距。您的图表的最小宽度大于20,因此当您将最大宽度设置为20时,最小宽度和最大宽度之间存在冲突(不能同时满足这两个约束)。在这种情况下,图表选择遵循最小宽度而不是最大宽度,因此您会看到图表的宽度为其计算宽度所允许的最小值。

您可以通过将最小宽度设置为零来允许遵守任何最大宽度。在对代码进行以下更改时,您将获得宽度为 20 的图表(但请注意,这没有足够的空间来显示条形图,因此您将看到的只是 y 轴):

 @Override
public void start(Stage primaryStage) throws Exception {
CategoryAxis xAxis = new CategoryAxis();
NumberAxis yAxis = new NumberAxis();

BarChart<String, Number> chart = new BarChart<>(xAxis,yAxis);
chart.setLegendVisible(false);
root.getChildren().add(chart);


chart.setBarGap(5);
chart.setCategoryGap(0);

chart.setMinWidth(0);
chart.setMaxWidth(20);



XYChart.Series series1 = new XYChart.Series();
XYChart.Data barA = new XYChart.Data("A", 100);
XYChart.Data barB = new XYChart.Data("B", -100);
series1.getData().addAll(barA, barB);

chart.getData().addAll(series1);


Scene scene = new Scene(root, 400, 200);
primaryStage.setScene(scene);
primaryStage.setHeight(600);
primaryStage.setWidth(400);
primaryStage.show();
}

如果您只是希望图表随窗口调整大小,VBox 默认情况下会执行此操作,因此您只需将最小宽度设置为零即可实现此操作:

    chart.setMinWidth(0);
// chart.setMaxWidth(20);

关于JavaFX 将 BarChart xAxis/width 设置为大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60365799/

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