- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我使用Pane
通过将一些Label
添加到其子列表中来打印它们。由于某种原因,我需要绑定(bind)标签宽度,但是当我执行以下操作时:
public class LabelTestApp extends Application
{
private Pane root = new Pane();
private Label myLabel = new Label("test");
public static void main(String[] args)
{
launch(args);
}
@Override
public void start(Stage stage)
{
root.getChildren.add(myLabel);
System.out.println(myLabel.widthProperty());
stage.setScene(new Scene(root, 500, 500);
stage.show();
}
}
Label
似乎没有更新其宽度。当我打印它时:
System.out.println(myLabel.widthProperty());
我明白了:
ReadOnlyDoubleProperty [bean : Label@xxxxxxxx[styleClass = label]'test', name:width, value: 0.0]
所以我认为标签的宽度是在布局期间计算的,并且由于 Pane 没有任何布局管理器,因此永远不会计算它,对吗?
如果是这样,我该如何获得这个宽度?
如果没有,问题出在其他地方,但我不知道出在哪里。
供引用:我需要使用 Pane 来绘制一些形状
,并控制它们的位置。标签的目的是在形状上打印一些信息。我需要标签的宽度,因为它们是形状上的一些线
,并且我不希望它们穿过标签。
请随时询问更多信息。
最佳答案
JavaFX 仅布置可见的组件。
如果你尝试这样的事情,你可以看到这一点:
final Label myLabel = new Label("test");
final Pane myPane = new Pane(myLabel);
System.out.println(myLabel.getWidth());
stage.setScene(new Scene(myPane, 640, 480));
stage.show();
System.out.println(myLabel.getWidth());
打印内容
0.0
19.5
正如您在此处看到的,在调用 stage.show()
之前,不会设置标签的大小。您还可以覆盖 Pane
以查看此时第一次调用 layoutChildren()
。
作为旁注,如果您想找出某些文本的宽度而不在舞台中显示它,您可以创建一个 Text
节点(而不是标签)并获取其首选宽度,例如
new Text("test").prefWidth(0)
希望这有帮助!
关于java - 标签的 widthProperty 何时更新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52427916/
我正在开发一个 javaFX 项目,在该项目中我需要精确控制 Node 的大小。我的代码当前在需要时正确更新 prefWidthProperty,并且最小和最大尺寸设置为使用 pref 尺寸,但 wi
我使用Pane通过将一些Label添加到其子列表中来打印它们。由于某种原因,我需要绑定(bind)标签宽度,但是当我执行以下操作时: public class LabelTestApp extends
我正在尝试实现一个拖放应用程序,用户可以将新的“组件”拖放到 Canvas 上,然后拖动它们。这是我用来实现此目的的代码: 在 CanvasController 类中 canvas.setOnDrag
我想在 BorderPane 中间放置一个带有红色矩形的 HBox,并且我希望该矩形随其容器( H盒)。这是我的代码: public class Test extends Application {
我有一个 TabPane,其中包含两个 Tab,并在 FXML 中设置。初始化时,我动态地将 AnchorPane 添加到 Tab 之一。然后,我将 ListView 设置为 AnchorPane 的
我是一名优秀的程序员,十分优秀!