Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaFXFXML:展开ScrollPane以适应其内容窗格的高度,直到重新调整其MaxHeight属性_Java_Javafx_Javafx 8_Javafx 2 - Fatal编程技术网

JavaFXFXML:展开ScrollPane以适应其内容窗格的高度,直到重新调整其MaxHeight属性

JavaFXFXML:展开ScrollPane以适应其内容窗格的高度,直到重新调整其MaxHeight属性,java,javafx,javafx-8,javafx-2,Java,Javafx,Javafx 8,Javafx 2,我有以下FXML视图: VBox 滚动窗格 VBox按钮容器 按钮(向按钮容器添加新按钮) 我希望滚动窗格展开其高度以匹配其子vbox的高度,直到达到某个高度[例如200px],然后停止展开 在过去的一个小时里,我一直在使用Min/Pref Viewport Height和Min/Max/Pref Height属性来实现这一点,但没有任何效果 这可能吗 编辑:下面是一个简单、完整且可验证的示例: MainView.fxml ScrollPane.prefHeightProperty

我有以下FXML视图:

  • VBox
    • 滚动窗格
      • VBox按钮容器
    • 按钮(向按钮容器添加新按钮)
我希望滚动窗格展开其高度以匹配其
子vbox的高度
,直到达到某个高度[例如200px],然后停止展开

在过去的一个小时里,我一直在使用
Min/Pref Viewport Height
Min/Max/Pref Height
属性来实现这一点,但没有任何效果

这可能吗

编辑:下面是一个简单、完整且可验证的示例:

MainView.fxml


ScrollPane.prefHeightProperty().bind(VBox.heightProperty())

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

这似乎有效:



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

明显的选择是
。那不行吗?如果没有,你能发一个吗?@James_D是的,那不行,我加了一个例子。看着这个,我认为它会起作用,但遗憾的是它没有,这有点让人困惑。有人会认为maxHeight属性实现了它所声称的功能。我试图避免通过代码来实现这一点,因为我希望控制器中的UI控件尽可能少,但我想这是不可避免的。@jawnythonpson
maxHeight
属性似乎做了它声称要做的事情:它设置滚动窗格的最大高度。问题似乎在于滚动窗格和视口具有最小高度。更新答案。
<?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>
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());
    }
}