JavaFX将条形图X轴/宽度设置为大小
我想强制调整柱状图的X尺寸,但不行。有没有办法实现这一点?可能通过覆盖条形图中的函数JavaFX将条形图X轴/宽度设置为大小,java,javafx,Java,Javafx,我想强制调整柱状图的X尺寸,但不行。有没有办法实现这一点?可能通过覆盖条形图中的函数 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
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();
}
我认为你在这里设置的最大宽度小于最小宽度,所以你观察到的是最小宽度。不过,chart.setMaxWidth20肯定会产生影响。现在还不清楚你想要实现什么,但这并没有发生。你能澄清一下吗?@James_D它确实有影响,图表不会缩放超过某个宽度,但该宽度不是20px。条形图似乎在内部覆盖20px。请尝试将图表的最小宽度设置为0。
chart.setMinWidth(0);
// chart.setMaxWidth(20);