为了账号安全,请及时绑定邮箱和手机立即绑定

ScrollPane 滚动不适用于其他节点

ScrollPane 滚动不适用于其他节点

繁星淼淼 2023-06-04 17:54:40
我想将 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);现在显示了滚动窗格和两个按钮。但是,由于某种原因,滚动窗格现在停止工作。显示滚动窗格及其内容,但水平或垂直滚动,它们都不起作用。任何人都知道为什么会发生这种情况以及如何解决它?
查看完整描述

2 回答

?
Qyouu

TA贡献1786条经验 获得超11个赞

当您使用 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);


查看完整回答
反对 回复 2023-06-04
?
弑天下

TA贡献1818条经验 获得超7个赞

这里的问题是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


查看完整回答
反对 回复 2023-06-04
  • 2 回答
  • 0 关注
  • 152 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信