2014-10-07 2 views
1

Я следующее расположение в JavaFX 8 определяется через .fxml:JavaFX 8. Изменение размера из SplitPane в BorderPane

<BorderPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="730.0" prefWidth="1005.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1"> 
    <top> 
     <Pane fx:id="statusPane" prefHeight="30.0" prefWidth="1005.0" BorderPane.alignment="CENTER" /> 
    </top> 
    <center> 
     <SplitPane fx:id="mainPane" dividerPositions="0.2" prefHeight="700.0" prefWidth="1005.0" minHeight="-Infinity" minWidth="-Infinity" BorderPane.alignment="CENTER"> 
     <items> 
      <ScrollPane fitToHeight="true" fitToWidth="true" hbarPolicy="ALWAYS" vbarPolicy="ALWAYS" minHeight="-Infinity" minWidth="-Infinity"> 
       <content> 
        <AnchorPane fx:id="menuPane" prefHeight="700.0" prefWidth="200.0" minHeight="-Infinity" minWidth="-Infinity" /> 
       </content> 
      </ScrollPane> 
      <ScrollPane fitToHeight="true" fitToWidth="true" hbarPolicy="ALWAYS" vbarPolicy="ALWAYS" minHeight="-Infinity" minWidth="-Infinity"> 
       <content> 
        <AnchorPane fx:id="formPane" prefHeight="700.0" prefWidth="800.0" minHeight="-Infinity" minWidth="-Infinity"/> 
       </content> 
      </ScrollPane> 
     </items> 
     </SplitPane> 
    </center> 
</BorderPane> 

Я не понимаю, почему SplitPane не может получить меньше, чем 1005x700, когда пользователь изменения размера BorderPane во время выполнения , SplitPane может получить больше, чем 1005x700, что хорошо, но он не может быть меньше, чем prefHeight и prefWidth, подумал сам Application Application (BorderPane).

Почему?

ответ

3

OK. Я нашел проблему!

minHeight="-Infinity" minWidth="-Infinity" 

, созданный Scene Builder, было очень плохой идеей!

Следующий код

minHeight="0" minWidth="0" 

работает, как ожидалось!

Поэтому не используйте -Infinity константу для minHeight или minWidth. 0 - это то, что вам нужно!

1

Размер макетов зависит не только от его размера, но размер контейнера (родительского)/содержания (дети), а

От Документов

A родитель панели будет изменять размер панели в пределах изменяемого размера панели во время компоновки.

Размер SplitPane зависит от его родителя. Поскольку Width от BorderPane составляет 1005,0 и Height - 730,0. SplitPane заполняет Родитель (который он, как предполагается)

Попробуйте удалить

prefHeight="730.0" prefWidth="1005.0" 

из BorderPane в выше FXML, вы можете найти SplitPane будет уменьшаться в высоту.

Почему только высота? Это происходит потому, что

<Pane fx:id="statusPane" prefHeight="30.0" prefWidth="1005.0" .. 

заставляет BorderPane не уменьшить его ширину.

Родитель должен изменить размер в зависимости от размера своего ребенка.

Короче говоря, если вы не уверены, насколько велика или мала ваше окно может быть, не указать prefHeight или prefWidth в макеты

Смежные вопросы