JavaFX ScrollPane – как использовать одну полосу прокрутки для прокрутки 2 панелей прокрутки?

У меня есть BorderPane с левой и центральной частью, обе панели ScrollPanes. Как прокручивать их одной полосой прокрутки (вертикальной). Или как получить доступ к одной из полос прокрутки?


person kingkong    schedule 15.02.2013    source источник


Ответы (2)


вы можете привязать свойство vScrollBar панели прокрутки1 (sp1) и установить измененное значение для другого свойства панели прокрутки vScrollbar.

Пример кода: этот код автоматически изменяет положение vScrollbar SP2 при изменении положения vScrollbar Sp1.

DoubleProperty vPosition = new SimpleDoubleProperty();
    vPosition.bind(sp1.vvalueProperty());
    vPosition.addListener(new ChangeListener() {
        @Override
        public void changed(ObservableValue arg0, Object arg1, Object arg2) {
             sp2.setVvalue((double) arg2);

        }
    }); 

Подсказка, чтобы получить одну полосу прокрутки для прокрутки двух панелей прокрутки: определите вертикальную полосу прокрутки, а затем скройте (может быть установлена ​​прозрачность на ноль или что-то еще ..) vsscrollbars для двух панелей прокрутки. а затем привязать к определенным изменениям полосы прокрутки и установить эти измененные значения для обеих полос прокрутки против полос прокрутки, как указано выше.

person invariant    schedule 15.02.2013
comment
Звучит как отличная идея, но почему-то она не работает для меня. Все, что я сделал, это изменил имена переменных, чтобы они соответствовали моей программе, кроме того, что я скопировал код в метод инициализации. Метод changed, по-видимому, никогда не вызывается. Любые идеи, почему это может быть? - person Maverick283; 25.09.2014

Ответ @invariant у меня не сработал. Но код, написанный ниже, сработал.

ScrollPane sp1 = new ScrollPane();
ScrollPane sp2 = new ScrollPane();
sp1.hvalueProperty().bindBidirectional(sp2.hvalueProperty());

При привязке двух компонентов друг к другу они прокручиваются вместе по горизонтали. Это будет работать для вертикального корпуса.

person mtrgn    schedule 29.02.2016