获取当前的网格宽度和高度

问题描述 投票:0回答:1
    imageGrid = new GridPane();
    imageGrid.prefWidthProperty().bind(gallerie.widthProperty().multiply(1.00));
    imageGrid.prefHeightProperty().bind(gallerie.heightProperty().multiply(0.9));
    imageGrid.setPadding(new Insets(20, 20, 20, 20));
    imageGrid.setHgap(20);
    imageGrid.setVgap(20);
    imageGrid.setStyle("-fx-background-color: #154BE5");

.........

static void loadCurrentImages(ArrayList<File> imageFiles) {

    ArrayList<ImageView> ivs = new ArrayList<>();
    int i = 0;
    int k = 0;
    int j = 0;
    for (File f : imageFiles) {
        ImageView iv = new ImageView();
        iv.setFitWidth(100);
        iv.setPreserveRatio(true);
        iv.setSmooth(true);
        iv.setImage(new Image(f.toURI().toString()));
        ivs.add(iv);
        imageGrid.add(ivs.get(i), k, j);
        i++;
        k++;
        if(k > imageGrid.widthProperty().intValue() / 100){  //???????
            k = 0;
            j++;
        }
    }
}

在最后一个if子句中,我想使用网格的当前大小,但我不知道如何进行gtet,因为它本身已绑定到另一个大小(图库)

我想获得当前的int值

javafx width gridpane
1个回答
0
投票

节点的布局范围不会立即计算。仅当在场景图形中渲染节点时才进行计算。要获得所需的它们,您需要显式请求布局。

node.applyCss();
node.requestLayout();

请注意,使用以上两行可能对性能的影响较小。

忽略所有代码问题(静态,名称约定,实际逻辑..,下面是您可以尝试的快速思路。

static void loadCurrentImages(ArrayList<File> imageFiles) {

    ArrayList<ImageView> ivs = new ArrayList<>();
    int i = 0;
    int k = 0;
    int j = 0;
    for (File f : imageFiles) {
        ImageView iv = new ImageView();
        iv.setFitWidth(100);
        iv.setPreserveRatio(true);
        iv.setSmooth(true);
        iv.setImage(new Image(f.toURI().toString()));
        ivs.add(iv);
        imageGrid.add(ivs.get(i), k, j);
        i++;
        k++;

        // Requesting layout
        imageGrid.applyCss();
        imageGrid.requestLayout();

        if(k > imageGrid.widthProperty().intValue() / 100){  //???????
            k = 0;
            j++;
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.