Прокрутка JScrollbar на 50 пикселей

Я работаю над программой, которая включает полосу прокрутки. В программе у меня есть прокручиваемое поле размером 500 пикселей, и я хочу, чтобы полоса прокрутки прокручивалась на 50 пикселей. Таким образом, я получаю 10 страниц. Я не хочу показывать 50% страницы, я хочу показывать только одну страницу за раз. Итак, как мне изменить размеры прокрутки?

Или есть лучший способ сделать это?

Приветствую, И спасибо заранее Брэм


person Bram    schedule 13.08.2012    source источник


Ответы (2)


Вы можете заставить прокручиваемое поле реализовывать интерфейс Scrollable, который объявляет два метода, которые поле прокрутки будет использовать, чтобы решить, насколько далеко оно будет прокручиваться, getScrollableUnitIncrement (колесико прокрутки, нажатие на стрелку прокрутки) и getScrollableBlockIncrement (щелчок по дорожке полосы прокрутки).

Если вы действительно когда-либо захотите, чтобы это было 50, вы можете использовать

jScrollPane.getVerticalScrollBar().setUnitIncrement(50);
jScrollPane.getVerticalScrollBar().setBlockIncrement(50);

Однако, если пользователь затем перетаскивает полосу прокрутки до тех пор, пока не будет показана половина страницы (я не думаю, что это поведение можно легко изменить), прокрутка все равно будет прыгать на 50 пикселей и показывать половину следующей страницы... Если вы реализуете Scrollable, вы можете основывать количество прокрутки на том, что в данный момент видно.

person Jacob Raihle    schedule 13.08.2012
comment
Спасибо за это, так как поведение не может быть легко изменено, можно ли использовать раскладку карточек и прокручивать карточки? Я знаю, что можно изменить карту с помощью кнопок, так можно ли это сделать с помощью полосы прокрутки? - person Bram; 13.08.2012
comment
@Bram Никогда не делал этого лично, но кажется возможным. Вы бы не хотели использовать панель прокрутки, а скорее автономный JScrollBar, который вы слушаете с AdjustmentListener. Когда слушатель уведомлен, найдите соответствующую карточку и покажите ее. Конечно, вам нужно настроить полосу прокрутки, чтобы она знала, сколько у вас карт. - person Jacob Raihle; 13.08.2012

Попробуйте это вместе с вами JScrollPane

scrollPane.getVerticalScrollBar().setUnitIncrement(50);

Это помогает, когда вы прокручиваете JScrollPane кнопками вверх/вниз, но вы можете показать половину страницы, перемещая ручку с помощью мыши.

В качестве альтернативы я могу предложить смотреть положение ручки с помощью AdjustmentListener и сдвигать значение scrollPane вручную.

scrollPane.getVerticalScrollBar().addAdjustmentListener(new AdjustmentListener()
    {
        public void adjustmentValueChanged(AdjustmentEvent e)
        {
            scrollPane.getVerticalScrollBar().setValue(e.getValue() / 50 * 50);
        }
    });

Но я думаю, что это не очень хорошая идея. Может быть, кто-то предложит лучший способ.

person Nestor    schedule 13.08.2012