получение текущей ширины и высоты Gridpane - PullRequest
0 голосов
/ 08 ноября 2019
    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 я хочу использовать текущий размер сетки, но я не знаю, как его получить, потому что самего привязка к другому размеру (галерея)

я хочу получить текущее значение int

1 Ответ

0 голосов
/ 08 ноября 2019

Границы расположения узла не будут вычисляться мгновенно. Будет вычисляться только тогда, когда узлы визуализируются в графе сцены. Чтобы получить их так, как вам нужно, вам нужно явно запросить макет.

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++;
        }
    }
}
...