получение текущей ширины и высоты Gridpane

    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


person BIKERSAN    schedule 07.11.2019    source источник
comment
Вы уверены, что не хотите FlowPane? Если все ваши узлы имеют одинаковую ширину, этот макет должен быть эквивалентен GridPane плюс автоматический перенос строк, который автоматически обновляется при изменении размера FlowPane. Кроме того, если galerie и imageGrid имеют общего предка, вероятно, есть лучший способ сохранить ширину одинаковой, чем привязка. Выберите правильные макеты в качестве предков...   -  person fabian    schedule 08.11.2019


Ответы (1)


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

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++;
        }
    }
}
person Sai Dandem    schedule 07.11.2019