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

时间:2018-05-19 01:19:05

标签: java javafx javafx-8 javafx-2

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

chart

我试过了

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没有任何方法可以返回像getPrefWidth()或其他任何类型的刻度线宽度。

2 个答案:

答案 0 :(得分:1)

好吧,所以我在JKostikiadis的帮助下弄清楚了。基本上,正如他/她提到的那样,你得到了绘图区域的layoutX,然后只需添加绘图区域的左边距。

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

答案 1 :(得分:0)

在大多数情况下,yAxis.getWidth()就足够了,但是如果你想要精确的话,就没有直接获取信息的方法(如果我没有错的话),所以你必须找到一个解决方法,我建议访问图表 - 情节 - 背景,然后找到该Region的layoutX,它实际上是您标记区域的宽度。以下是如何实现这一目标:

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

为了解释这里的想法是一张图片(图表 - 情节 - 背景有黑色背景颜色):

enter image description here

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