如何在JavaFx中添加滚动条

3

我正在尝试将滚动条添加到HBox中。虽然已经添加了滚动条,但是却无法滚动。我该如何使其正常工作?

public class ScrollableItems {

    public void scrollableItems(HBox content) {

        double height = 180;

        ScrollBar sc = new ScrollBar();

        content.getChildren().add(sc);

        sc.setLayoutX(content.getWidth() - sc.getWidth());
        sc.setMin(0);
        sc.setOrientation(Orientation.VERTICAL);
        sc.setPrefHeight(height);
        sc.setMax(height * 2);

        sc.valueProperty().addListener(new ChangeListener<Number>() {
            public void changed(ObservableValue<? extends Number> ov,
                    Number old_val, Number new_val) {
                content.setLayoutY(-new_val.doubleValue());
            }
        });
    }
}

将子元素添加到一个 HBox 中,然后将其传递给上面的 scrollableItems(HBox content) 函数以添加滚动条。
public HBox mainItemsWrapper() {
    HBox scrollabelWrapper = new HBox();
    scrollabelWrapper.setMaxHeight(180);

    HBox entityDetailViewWrapper = new HBox();

    entityDetailViewWrapper.getChildren().addAll(.....);

    scrollabelWrapper.getChildren().add(entityDetailViewWrapper);
    new ScrollableItems().scrollableItems(scrollabelWrapper);

    return scrollabelWrapper;
}

感谢大家……
2个回答

13

我其实不太明白为什么你要重新发明轮子... 你可能应该使用ScrollPane代替。

这个小例子展示了如何使用ScrollPane类创建一个水平滚动的HBox:

@Override
public void start(Stage primaryStage) {

    HBox hbox = new HBox();

    Button b = new Button("add");
    b.setOnAction(ev -> hbox.getChildren().add(new Label("Test")));

    ScrollPane scrollPane = new ScrollPane(hbox);
    scrollPane.setFitToHeight(true);

    BorderPane root = new BorderPane(scrollPane);
    root.setPadding(new Insets(15));
    root.setTop(b);

    Scene scene = new Scene(root, 400, 400);
    primaryStage.setScene(scene);
    primaryStage.show();
}

感谢您的回复@eckig。我能否捕获ScrollPane的ScrollBar并自定义其宽度? - Program-Me-Rev
你尝试设置 ScrollPane 本身的宽度了吗?那应该可以解决问题。 - eckig

4
如eckig所说,您可以将HBox包装到ScrollPane中。
此外,您可以在CSS中自定义滚动条的可视部分。我发现这个链接有助于理解滚动条的不同部分:通过CSS自定义ScrollBar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接