我有一个程序来绘制带有值轴的图表。 需要每“ y”个像素绘制一个值。
如图所示,黑线显示绘制这些值的位置。 每个轴值旁边都会绘制一个相应的标签。
问题在于,在没有位移的情况下,原点是在标签的左上角获取的,因此文本未与该线垂直对齐。
为了解决这个问题,我正在考虑获取标签的高度并手动偏移标签的y位置。
如何获取以像素为单位的标签高度?
这是用于绘制线条和标签的源代码:
public void drawAxis() {
int i = 0;
for(i=0; i<20; i++) {
long y_pos = 0;
y_pos = i*100;
Line gridTick = new Line(0, y_pos, 20, y_pos);
Label gridLabel = new Label(getStringFromValue(y_pos));
gridLabel.setTranslateX(30);
gridLabel.setTranslateY(y_pos);
rightAxisPanel.getChildren().add(gridTick);
rightAxisPanel.getChildren().add(gridLabel);
}
}
答案 0 :(得分:1)
只需进行设置,确保标签大小大于实际所需的大小,并且边界与该线的y坐标对称。让Label
处理对齐方式。
假设您扩展的Parent
的子类没有修改布局位置,就可以
public void drawAxis() {
int i = 0;
for(i=0; i<20; i++) {
double y_pos = i*100;
Line gridTick = new Line(0, y_pos, 20, y_pos);
Label gridLabel = new Label(getStringFromValue(y_pos));
gridLabel.setLayoutX(30);
// make sure label bounds range from y_pos-25 to y_pos+25 vertically
gridLabel.setLayoutY(y_pos-25);
gridLabel.setPrefHeight(2*25);
gridLabel.setMinHeight(Region.USE_PREF_SIZE);
// set text alignment in label area
gridLabel.setAlignment(Pos.CENTER_LEFT);
rightAxisPanel.getChildren().addAll(gridTick, gridLabel);
}
}
这假定您使用的字体大小不需要超过50个像素才能垂直显示。