我正在使用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位图。
我已经在网上搜索过,但没有找到答案(或我完全错过了)。
有专家帮助吗?
答案 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
我会假设你的字体搞砸了,可能是大小设置为零或其他错误。