如何在 JavaFx 中获取 LineChart 的刻度标签的宽度?

How to get the width of the tick label of a LineChart in JavaFx?

如何获取下面屏幕截图中红色框突出显示的部分的宽度?

我试过了

LineChart<Number, Number> sourceChart = ...;
NumberAxis axis = (NumberAxis) sourceChart.getXAxis();
FilteredList<Node> filtered = axis.getChildrenUnmodifiable().filtered(node -> node instanceof Text);
node = filtered.get(0);

filtered 是刻度列表,但 node 没有任何方法 returns 刻度的宽度,如 getPrefWidth() 或任何此类。

在大多数情况下,yAxis.getWidth() 已经足够了,但是如果您想精确一点,则没有直接的方法来获取该信息(如果我没记错的话),因此您将不得不找到一个解决方法,我建议访问图表背景,然后找到该区域的 layoutX,它实际上是您标记区域的宽度。以下是实现该目标的方法:

Region r = (Region) lineChart.lookup("Region"); // access chart-plot-background
double yAxisWidth = r.getLayoutX(); // find out where it starts
System.out.println(yAxisWidth);

这里用一张图来说明思路(图表背景是黑色背景色):

PS。我仍然不确定这是正确的方法,它可能会失败,具体取决于您可能在图表

上应用的不同 CSS 规则

好吧,我在 JKostikiadis 的帮助下弄明白了。基本上,正如 s/he 提到的,你得到绘图区域的 layoutX,然后只需添加绘图区域的左填充。

Region plotArea = (Region) sourceChart.lookup("Region");
double plotAreaLayoutX = plotArea.getLayoutX();
double chartLeftPad = sourceChart.getPadding().getLeft();
double labelWidth = plotAreaLayoutX + chartLeftPad;