Как получить большой диапазон значений ScrollBar в JavaFX? - PullRequest
0 голосов
/ 25 октября 2018

Например, скажем, у нас есть полоса прокрутки для отображения / манипулирования данными в каком-либо приложении.Полоса прокрутки имеет минимальные, максимальные значения и видимое количество.Но в диапазоне значений, отображаемых в соответствии со значением полосы прокрутки, есть некоторая путаница.

В качестве примера приведено изображение

1 Ответ

0 голосов
/ 25 октября 2018

ScrollBar указывает позицию, а не диапазон.Позиция доступна через свойство value.Свойство visualAmount определяет размер ползунка.

Если value == max, большой палец находится в крайнем правом / нижнем положении.Ваше «максимальное значение большого пальца» будет превышать max.

Поэтому вы должны решить, сколько элементов отобразить и рассчитать visibleAmount и max, исходя из этого:

max           = itemCount - displayedItems
visibleAmount = max * displayedItems / itemCount

Пример для ScrollPane -подобной реализации:

@Override
public void start(Stage stage) {
    ScrollBar scrollBar = new ScrollBar();
    scrollBar.setOrientation(Orientation.VERTICAL);
    StackPane.setAlignment(scrollBar, Pos.CENTER_RIGHT);

    VBox container = new VBox();
    StackPane.setAlignment(container, Pos.TOP_LEFT);

    StackPane root = new StackPane(container, scrollBar);

    InvalidationListener listener = o -> {
        // adjust scrollbar properties on resize of root or content
        double rootHeight = root.getHeight();
        double contentHeight = container.getHeight();

        double max = Math.max(0, contentHeight - rootHeight);
        scrollBar.setMax(max);
        scrollBar.setVisibleAmount(max * rootHeight / contentHeight);
    };
    root.heightProperty().addListener(listener);
    container.heightProperty().addListener(listener);

    // move container up based on the scrollbar value
    container.translateYProperty().bind(scrollBar.valueProperty().negate());

    // generate some content
    for (int i = 0; i < 10; i++) {
        Rectangle rect = new Rectangle(100, 100, (i & 1) == 0 ? Color.BLACK : Color.LIGHTGRAY);
        container.getChildren().add(rect);
    }

    Scene scene = new Scene(root, 300, 300);
    stage.setScene(scene);
    stage.show();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...