javafx自定义布局 Pane : label always returns -1 for its preferred width and height

标签 java layout javafx

我尝试在 javafx 中实现一个自定义布局 Pane ,它将所有节点围绕其中心放​​置在一个圆圈中。 问题是我的节点的首选宽度、最小宽度和高度属性总是返回 -1.0。这是我的类(class):

public class CirclePane extends Region {

@Override
protected void layoutChildren() {
    double middleX = getWidth() / 2;
    double middleY = getHeight() / 2;
    double factor = Math.min(getWidth(), getHeight()) * 0.45;// how far from the middle the nodes will be arranged
    double degreesPerChild = 2 * Math.PI / getChildren().size();
    for (int i = 0; i < getChildren().size(); i++) {
        if(getChildren().get(i) instanceof Region){
            Region r = (Region) getChildren().get(i); // I believe I need region to get any sizes?
            double prefW = Math.max(r.getMinWidth(), r.getPrefWidth()); //My attempt to get a reliable preferredwidth and height
            double prefH = Math.max(r.getMinHeight(), r.getPrefHeight());

            double degrees = i * degreesPerChild;
            double xPos = Math.sin(degrees) * factor + middleX - prefW / 2;
            double yPos = Math.cos(degrees) * factor + middleY - prefH / 2;
            layoutInArea(r, xPos , yPos, prefW, prefH, 0.0d, HPos.LEFT, VPos.CENTER);
        }
    }
}

@Override
public ObservableList<Node> getChildren() {
    return super.getChildren();
}

它可以工作,但所有节点都会向右移动(几个像素,大约是它们的宽度/2)。 另外,我想确保其他组件正确安装。

最佳答案

我自己找到了解决方案。 要获得正确的宽度和高度,您必须调用 Region.prefWidth(-1)Region.prefHeight(-1)分别。

这两个函数的目的是:

Called during layout to determine the preferred width/height for this node.

关于javafx自定义布局 Pane : label always returns -1 for its preferred width and height,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29859499/

相关文章:

android - 如何将图标放在 Android 中圆形图像的顶部?

css - 如何设置 jquery ui Dialog minwidth 但如果可能的话让它变大?

java - 从另一个类中清除 TextField

java - getClass().getResource() 加载文件失败,File() 有效

java - Intellij IDEA 和 Spring Boot : how to restart only parts of my java code?

java - 为什么要避免在 Java 中大量使用 ByteStream

java - 使用 java.applet 类在 Java 中播放声音

java - 如何以编程方式添加 webview

java - JavaFX中是否有 'Scene Changed Listener'

Java : JFrame Issue with Print Statement