我正在尝试将ScrollBar添加到HBox。 ScrollBar被添加,但我没有滚动。我怎样才能使它发挥作用?
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)
以添加SCrollBar
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;
}
谢谢大家......
答案 0 :(得分:7)
我真的不明白为什么你要重新发明轮子......你应该使用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();
}
答案 1 :(得分:4)
正如eckig所说,你可以将HBox包装成ScrollPane。
另外,您可以在CSS中自定义滚动条的可视部分。我发现这个链接对于理解滚动条的不同部分非常有用:Customize ScrollBar via CSS