想要将 JavaFX 图表的 x 轴刻度标签设置text-alingment为。center
我有一个带有日期的 JavaFX NumberAxis X 轴,使用多行文本作为刻度标签。使用 . 将刻度标签设置为“dd/MMM\YYYY”或“HH:mm\ndd/MMM” AxisX.setTickLabelFormatter(getTimeAxisString())。用户函数 getTimeAxisString() 提供刻度标签的格式化字符串。默认情况下,这会导致文本左对齐,如下图所示:
轴刻度标签
是否有 JavaFx 方法可以更改此处的文本排列?我可以为刻度标签分配 CSS 类吗?
令人惊讶的是,不直接支持对刻度标签进行样式设置。另外,所有图表和协作者都非常小心,不要在任何 api 中暴露其层次结构中的节点(甚至在内部)。所以看起来我们需要依赖 Axis 的实现细节..
axis.lookup(style)基本任务是访问文本并设置其样式,方法是直接配置其属性或设置自定义样式类并通过 css 配置它。
基本的解决方案路径是监听轴子节点并在添加时配置所有 Text 类型节点的属性。下面的代码片段设置了一个自定义样式类。
xAxis.getChildrenUnmodifiable().addListener((ListChangeListener<Node>) c -> {
while (c.next()) {
if (c.wasAdded()) {
for (Node mark : c.getAddedSubList()) {
if (mark instanceof Text) {
mark.getStyleClass().add("axis-tick-mark-text-node");
}
}
}
}
});
Run Code Online (Sandbox Code Playgroud)
样式示例:
.axis-tick-mark-text-node {
-fx-text-alignment: center;
-fx-fill: red;
}
Run Code Online (Sandbox Code Playgroud)