JavaFX-以像素为单位获取Label项目的高度(或使用其高度中心垂直对齐标签)

时间:2019-07-02 22:54:00

标签: java javafx label

我有一个程序来绘制带有值轴的图表。 需要每“ y”个像素绘制一个值。

如图所示,黑线显示绘制这些值的位置。 每个轴值旁边都会绘制一个相应的标签。

问题在于,在没有位移的情况下,原点是在标签的左上角获取的,因此文本未与该线垂直对齐。

为了解决这个问题,我正在考虑获取标签的高度并手动偏移标签的y位置。

如何获取以像素为单位的标签高度?

Label vertical alignment

这是用于绘制线条和标签的源代码:

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);
    }
}

1 个答案:

答案 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个像素才能垂直显示。