在JavaFX中获取文本边界

时间:2016-11-10 17:18:04

标签: java javafx

我正在使用JavaFX生成我的音乐文档的位图预览。

在某些点,在绘画过程中,我需要知道给定字符串的尺寸。

到目前为止,我已经使用了以下内容:

for (int number : arryNum) {
  if (countsByNumbers.containsKey(number)) {
    int newCount = countsByNumbers.get(number) +1;
    countsByNumbers.put(number, newCount);
  } else {
    countsByNumbers.put(number, 1);
  }

然而,eclipse告诉我这是折旧的。它的折旧使得bounds对象为空(全部设置为零)。

如何获取单行字符串的边界 - 宽度和高度?

请注意屏幕控件上有没有用于显示此内容。一切都是在记忆中产生的,并且"倾倒"到png位图。

我已经在网上搜索过,但没有找到答案(或我完全错过了)。

有专家帮助吗?

1 个答案:

答案 0 :(得分:3)

正如我在评论中提到的,getLayoutBounds()并未弃用,并且完全有效。它只是不推荐使用的构建器。

那就是说,我已经创建了以下测试应用程序,它使用构建器直接创建对象并产生看似正确的输出:

import javafx.geometry.Bounds;
import javafx.scene.text.Text;
import javafx.scene.text.TextBuilder;
import javafx.stage.Stage;
import javafx.scene.text.Font;

public class stack extends javafx.application.Application {

    public static void main(String[] args)
    {
        // Builder
        Bounds b = TextBuilder.create().text("hello").build().getLayoutBounds();
        System.out.println(b.getHeight() + ", " + b.getWidth());

        b = TextBuilder.create().text("heeeeello").build().getLayoutBounds();
        System.out.println(b.getHeight() + ", " + b.getWidth());

        // No builder
        b = new Text("hello").getLayoutBounds();
        System.out.println(b.getHeight() + ", " + b.getWidth());

        b = new Text("heeeeello").getLayoutBounds();
        System.out.println(b.getHeight() + ", " + b.getWidth());

        // With bad font, zero sized
        Font my_font = new Font("i am not a font", 0);
        Text text = new Text("heeeeello");
        text.setFont(my_font);
        b = text.getLayoutBounds();
        System.out.println(b.getHeight() + ", " + b.getWidth());

        // With bad font, arbitrary size
        my_font = new Font("i am not a font", 20);
        text = new Text("heeeeello");
        text.setFont(my_font);
        b = text.getLayoutBounds();
        System.out.println(b.getHeight() + ", " + b.getWidth());
    }

    @Override
    public void start(Stage primaryStage) throws Exception {  }  
}

输出:

15.9609375, 25.91015625
15.9609375, 51.01171875

15.9609375, 25.91015625
15.9609375, 51.01171875

0.0, 0.0
26.6015625, 85.01953125

我会假设你的字体搞砸了,可能是大小设置为零或其他错误。