Как сделать приложение с автоматическим изменением размера в javafx

Проблема заключается в том, как создать пользовательский интерфейс, в котором при изменении размера сцены содержимое внутри будет растягиваться или сжиматься, а иногда и опускаться ниже (javafx + построитель сцен)

Как это

это изображение


person ngongocthinh123    schedule 28.07.2021    source источник
comment
То, что вы описываете, является поведением по умолчанию для большинства панелей макета JavaFX. .   -  person James_D    schedule 28.07.2021
comment
Посмотрите, можете ли вы почерпнуть идеи из этого или это.   -  person Sedrick    schedule 28.07.2021
comment
я уже прочитал это, они также используют hgrow и vgrow из hbox и vbox и устанавливают maxwidth на максимальное значение. Но это просто работает для кнопки, чтобы следовать их ограничениям hgrow и vgrow, а не для просмотра изображения. Так что проблема все же есть   -  person ngongocthinh123    schedule 28.07.2021
comment
Посмотрите, может ли это помочь с часть ImageView.   -  person Sedrick    schedule 28.07.2021
comment
Сначала вам нужно точно определить, чего вы хотите достичь. В качестве примера вы привели веб-приложение, использующее media query с фильтром ширины. На основе изменения этого параметра (ширины окна) создается другой макет (в примере только с CSS). Тот же подход можно реализовать в javafx, начиная с отслеживания изменений Stage::widthProperty.   -  person mr mcwolf    schedule 30.07.2021


Ответы (1)


Вообще говоря, вы хотите избегать использования абсолютных макетов, контейнеров или ограничений, где это возможно. Например, если вы хотите, чтобы 2 кнопки заполнили всю ширину панели макета HBox: нажмите каждую кнопку, перейдите в раздел «Макет» и установите для параметра «Hgrow» значение «ВСЕГДА», а для параметра «Максимальная ширина» — значение «MAX_VALUE». Кнопки всегда будут пытаться занять как можно больше места каждый раз, когда размер окна изменяется. Имейте в виду, что не каждый узел может быть динамически изменен таким образом.

Чтобы принципиально изменить макет (как в вашем клипе, когда изображение в правом верхнем углу удаляется, а вверху остается только статья о Байлсе), вы должны использовать прослушиватель по ширине сцены, например:

stage.widthProperty().addListener((obs, old, new) -> {
    ...
});

Затем в теле вы можете проверить, меньше ли новое значение некоторой константы, и соответственно установить ограничения макета.

Я надеюсь, что этот ответ поможет вам :) Если нет, не стесняйтесь комментировать!

person HackBrettHB    schedule 28.07.2021
comment
да, как вы сказали, я проверил это. Это работает, но только для кнопки, когда я тестирую изображение, изображение не может растягиваться или сжиматься. Я также пытаюсь поместить изображение внутри кнопки, но оно все еще не работает. Есть ли какое-нибудь решение. Спасибо друг - person ngongocthinh123; 28.07.2021
comment
К сожалению, ImageView — это один из упомянутых мною компонентов, размер которого нельзя тривиально изменить динамически. Если вы не хотите просто обрезать изображение, лучше всего привязать ImageViews fitWidthProperty к widthProperty рабочей области. То же самое можно сделать для свойств высоты. Более подробная информация по этой теме уже доступна на stackoverflow. Возможно, обратитесь к этому. - person HackBrettHB; 28.07.2021