2016-04-19 5 views
1

Привет У меня есть следующая ситуация:центрирования содержание ScrollPane с fitToWidth = ложному с помощью JavaFX

<ScrollPane xmlns:fx="http://javafx.com/fxml" fx:controller="MenuController" fx:id="menuPane" stylesheets="/fxml/styles/menu_style.css" fitToWidth="true" fitToHeight="true" hbarPolicy="ALWAYS" vbarPolicy="ALWAYS"> 
    <VBox alignment="CENTER"> 
    <HBox alignment="CENTER"> 
     <VBox fx:id="menuView"> 
     <elements></elements> 
     </VBox> 
    </HBox> 
    </VBox> 
</ScrollPane> 

Это выглядит следующим образом:

Полный экран с выравниванием

Full Screen with alignment

Однако, когда вы делаете это меньше по ширине, scrollpane не работает.

измененными размерами с выравниванием

Resized with alignment

Когда я изменил значение fitToWidth от истинного на ложное я получаю:

Полный экран с прокруткой

Full screen with scrolling

, поэтому нет горизонтального выравнивания по центру. Однако скроллинг работает:

измененного размеров с прокруткой

Resized with scrolling

Есть ли возможность иметь выравнивание и прокрутку работать одновременно?

Странно, что высота прокрутки и вертикальное выравнивание работают правильно.

Невозможно добавить более 2 изображений, извините за это.

ответ

1

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

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

Таким образом, один из вариантов заключается в том, чтобы связать минимальную ширину содержимого с фактической шириной окна просмотра, заставляя контент быть как минимум размером с область просмотра. Вы можете сделать это в FXML:

<ScrollPane xmlns:fx="http://javafx.com/fxml" fx:controller="MenuController" fx:id="menuPane" stylesheets="/fxml/styles/menu_style.css" fitToWidth="true" fitToHeight="true" hbarPolicy="ALWAYS" vbarPolicy="ALWAYS"> 
    <VBox alignment="CENTER" minWidth="${menuPane.viewportBounds.width}"> 
    <HBox alignment="CENTER"> 
     <VBox fx:id="menuView"> 
     <elements></elements> 
     </VBox> 
    </HBox> 
    </VBox> 
</ScrollPane> 
+0

Он начал работать, когда я добавил к HWW minWidth. Тема может быть закрыта, как решена. Спасибо, Джеймс.

+0

Ты спасатель! Также я узнал, что могу напрямую связать через FXML! <3 –