Вопрос по разметке JavaFX - PullRequest
       48

Вопрос по разметке JavaFX

3 голосов
/ 07 апреля 2010

У меня возникли проблемы с пониманием макетов в JavaFX. Рассмотрим следующий код.

Stage {
    title: "ListView test"
    scene: Scene {
        width: 400
        height: 400
        content: [
            VBox {
                content: [
                    ListView {
                        height: 200
                        width: 200
                        items: ["item1", "item2"]
                    }
                ]
            }
        ]
    }
}

Я ожидал, что ListView появится в измерении 200 x 200, но как бы я ни пытался это исправить, ширина и высота ListView казались неизменными. Но следующий код работает для отображения ListView, как я и предполагал.

Stage {
    title: "ListView test"
    scene: Scene {
        width: 400
        height: 400
        content: [
            ListView {
                height: 200
                width: 200
                items: ["item1", "item2"]
            }
        ]
    }
}

Итак, в чем здесь проблема? Я не могу использовать ListView в макетах?

Ответы [ 2 ]

3 голосов
/ 12 апреля 2010

В JavaFX 1.2.x информация о ширине и высоте узла в макете предназначена для чтения. Если вы хотите указать «предпочтительный» размер, используйте

ListVIew {
    layoutInfo: LayoutInfo {width: 200, height: 200}
}

Это будет обработано в макете, так как предпочтительный размер и компонент будут размечены в соответствии с этим. Если у вас есть опыт работы с NetBeans JavaFX Composer Preview, вы можете заметить, что в сгенерированном коде используется специальный вид привязки, позволяющий корректно изменять размеры в макете и других контейнерах (сцена, группа).

Ad Broken: макеты в Java FX построены на Node и используют алгоритмический подход к позиционированию и изменению размеров компонентов, который не зависит от геометрического положения, используемого в Group / Scene. К сожалению, в 1.2 это приносит некоторую двойственность, которая должна вводить в заблуждение новичков.

1 голос
/ 11 апреля 2010

Узлам макета разрешено изменять положение и размер своих дочерних элементов. Простая установка ширины и высоты дочернего элемента и ожидание того, что макет будет знать, что он должен учитывать ваши новые значения, не годится, вам нужен какой-то способ сообщить узлу макета значения, которые вы хотели бы соблюдать. Взгляните на класс LayoutInfo и переменную layoutInfo в Node.

...