[英]How to get label.getWidth() in javafx
总是当我尝试在Java中获取数组的宽度时,它只返回0,我不知道为什么。 有人可以向我解释它是如何做的正确吗?
Label label = new Label();
label.setFont(Font.font(label.getFont().getFamily(), 8));
label.setText(""
+ a[i][j].getList().getFirst().getLength()
+ " mal "
+ intToColor(a[i][j].getList().getFirst()
.getColor()));
label.relocate((x1 + x2) / 2 - label.getWidth() / 2, (y1 + y2) / 2);
label.idProperty().set("trackName");
label.setTextFill(Color.web("GREEN"));
field.getChildren().addAll(path, label);
System.out.println(label.getLayoutBounds().getWidth());
System.out.println(label.getWidth());//... also i tested a lot of different getters but i couldn't get the label width (same problem with height)
希望你知道我要做什么。
@tomsontom
做过这个:
label.prefWidth(-1);
label.prefHeight(-1);
label.impl_processCSS(true);
// label.resizeRelocate(x, y, width, height);
System.out.println(label.getWidth());
但它没有用 - 你能更准确地解释一下我需要做什么吗?
要获得调用prefWidth(-1)和prefHeight(-1)所需的宽度,只有控件通过resizeRelocate进行布局后才能设置布局边界
要在显示阶段之前获得正确的宽度,您还需要调用impl_processCSS(true)这是一个NONE公共API,但目前没有什么比IIRC更好的了
HBox h = new HBox();
Label l = new Label("Hello");
h.getChildren().add(l);
Scene s = new Scene(h);
l.impl_processCSS(true);
System.err.println(l.prefWidth(-1)+"/"+l.prefHeight(-1));
另一种方法是使用Fontloader.computeStringWidth(text, font)
计算标签的textProperty的字符串宽度,该字符宽度将输出标签的textProperty的像素宽度,并且非常类似于在后面的部分布置标签时获取标签的宽度。
例如:
FontLoader fontLoader = Toolkit.getToolkit().getFontLoader();
Label label = new Label("My name is Warren. I love Java.");
label.setFont(Font.font("Consolas", FontWeight.THIN, FontPosture.REGULAR, 16));
System.out.println("The label's width is: " + fontLoader.computeStringWidth(label.getText(), label.getFont()));
输出是:
The label's width is: 272.70312
去测试:
FontLoader fontLoader = Toolkit.getToolkit().getFontLoader();
Label label = new Label("My name is Warren. I love Java.");
label.setFont(Font.font("Consolas", FontWeight.THIN, FontPosture.REGULAR, 16));
System.out.println("The label's textProperty string width is: " + fontLoader.computeStringWidth(label.getText(), label.getFont()));
System.out.println("Label's width before layouted: " + label.getWidth());
primaryStage.setScene(new Scene(new StackPane(label), 300, 250));
primaryStage.show();
System.out.println("Label's width after layouted: " + label.getWidth());
这是输出
The label's textProperty string width is: 272.70312
Label's width before layouted: 0.0
Label's width after layouted: 273.0
相比之下,它们是相同的。 希望这可以帮助。
我不认为在显示标签之前会计算宽度:将其添加到可见的父级,您应该得到非零结果。
您可以尝试以下方法:
func foo()
{
label.layout();
Platform.runLater(()->
{
System.out.println(label.getWidth());
});
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.