ScrollPane 滚动不适用于其他节点

我想将 StackPane 作为我的根窗格。我想要一个 scrollPane 作为场景中间的一个小盒子和容器下方的两个按钮。


我试图通过编写这段代码来实现它:


 private StackPane root = new StackPane();

    private Scene scene = new Scene(root, 1366, 768);


    public ContinueScreen() {

        Button button1 = new ButtonBuilder("My Button1").setPrefWidth(200).build();

        Button button2 = new ButtonBuilder("My Button2").setPrefWidth(200).build();

        Button button3 = new ButtonBuilder("My Button3").setPrefWidth(200).build();

        Button button4 = new ButtonBuilder("My Button4").setPrefWidth(200).build();

        Button button5 = new ButtonBuilder("My Button5").setPrefWidth(200).build();

        Button button6 = new ButtonBuilder("My Button6").setPrefWidth(200).build();


        VBox vBox = new VBox(5);

        vBox.getChildren().addAll(button1, button2, button3, button4, button5, button6);


        ScrollPane scrollPane = new ScrollPane();

        scrollPane.setContent(vBox);

        scrollPane.setPannable(true);

        scrollPane.setMaxSize(500, 180);

        scrollPane.setVbarPolicy(ScrollPane.ScrollBarPolicy.ALWAYS);

        scrollPane.setHbarPolicy(ScrollPane.ScrollBarPolicy.AS_NEEDED);


        root.getChildren().add(scrollPane);

        StackPane.setAlignment(scrollPane, Pos.CENTER);


    }

正如您可能注意到的那样,代码确实可以正常工作,但直到我在下面添加我正在谈论的按钮之前。我在 HBox 中添加了这些按钮


        HBox hBox = new HBox(5);

        hBox.setAlignment(Pos.BOTTOM_CENTER);

        hBox.getChildren().addAll(new Button("cat"), new Button("dog"));

        root.getChildren().addAll(hBox);

现在显示了滚动窗格和两个按钮。但是,由于某种原因,滚动窗格现在停止工作。显示滚动窗格及其内容,但水平或垂直滚动,它们都不起作用。任何人都知道为什么会发生这种情况以及如何解决它?


繁星淼淼
浏览 186回答 2
2回答

Qyouu

当您使用 StackPane 作为根节点时,它会将节点堆叠在一起,因此顶部窗格是 HBox 而不是 ScrollPane,因此您无法使用它。使用 BorderPane 或 VBox 并尝试。        BorderPane root = new BorderPane();        Scene scene = new Scene(root, 1366, 768);        root.setCenter(scrollPane);        HBox hBox = new HBox(5);        hBox.getChildren().addAll(new Button("cat"), new Button("dog"));        root.setBottom(hBox);

弑天下

这里的问题是StackPane允许调整HBox它的大小。涵盖HBox了防止鼠标事件到达ScrollPane. 您可以通过着色轻松地看到这一点HBox:hBox.setStyle("-fx-background-color: rgba(100%, 0%, 0%, 0.5)");最简单的解决方案是设置HBox只接收非(完全)透明区域的事件:hBox.setPickOnBounds(false);但是,您也可以设置HBox以占用适合内容的首选大小所需的空间,并通过以下方式进行对齐StackPane:hBox.setPrefSize(Region.USE_COMPUTED_SIZE, Region.USE_COMPUTED_SIZE); hBox.setMaxSize(Region.USE_PREF_SIZE, Region.USE_PREF_SIZE); StackPane.setAlignment(hBox, Pos.BOTTOM_CENTER); // hBox.setAlignment(Pos.BOTTOM_CENTER);请注意,使用StackPane这样的按钮不会为您提供响应式 GUI:如果您将窗口的大小调整到足够小的高度,按钮将覆盖ScrollPane.您可能会更好地使用 aBorderPane或将StackPaneand 包装HBox在 a 中并VBox设置VBox.vgrow为...Priority.ALWAYSStackPane
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java