JavaFX FXML:将ScrollPane扩展到其内容窗格的适合高度,直到它恢复其MaxHeight属性

时间:2018-01-15 16:34:29

标签: java javafx javafx-8 javafx-2

我有以下FXML视图:

  • 垂直框
    • 滚动窗格
      • VBox buttonsContainer
    • 按钮(向 buttonsContainer添加新按钮

我希望ScrollPane 展开高度以匹配其child vbox's height,直到达到某个高度[例如200px]然后它停止展开。

过去1小时我一直在使用Min/Pref Viewport HeightMin/Max/Pref Height属性来实现这一目标,但没有任何结果。

这可能吗?

修改:这是一个简洁,完整且可验证的示例:

MainView.fxml     

<?import javafx.scene.control.Button?>
<?import javafx.scene.control.ScrollPane?>
<?import javafx.scene.layout.VBox?>

<VBox alignment="CENTER" prefHeight="0.0" prefWidth="200.0" spacing="5.0" xmlns="http://javafx.com/javafx/8.0.60" xmlns:fx="http://javafx.com/fxml/1" fx:controller="MainController">
   <ScrollPane maxHeight="200.0"  VBox.vgrow="ALWAYS">
         <VBox fx:id="_buttonsContainer" />
   </ScrollPane>
   <Button fx:id="_btnAddButton" mnemonicParsing="false" text="Button" />
</VBox>

MainController.java

public class MainController implements Initializable{

    @FXML private Button _btnAddButton;
    @FXML private VBox   _buttonsContainer;


    @Override
    public void initialize(URL location, ResourceBundle resources) {
        _btnAddButton.setOnAction(e -> {
            addButton();
        });
    }

    private void addButton(){
        _buttonsContainer.getChildren().add(new Button());
    }
}

2 个答案:

答案 0 :(得分:1)

这似乎有效:

   <ScrollPane fx:id="scrollPane" maxHeight="200.0" minViewportHeight="0.0" minHeight="0.0">
         <VBox fx:id="_buttonsContainer" />
   </ScrollPane>

默认情况下,滚动窗格及其视口似乎有一些固定的正最小高度。

答案 1 :(得分:0)

ScrollPane.prefHeightProperty()结合(VBox.heightProperty())。

然后添加ScrollPane.setMaxHeight(200);试试这个