Как предотвратить прокрутку JScrollBar для определенных событий, таких как страница вниз? - PullRequest
1 голос
/ 24 августа 2011

У меня очень большое представление о данных. Мне нужна полоса прокрутки для пользователя, но я хочу переопределить стандартный способ, которым полоса прокрутки обрабатывает нажатие стрелок вверх и вниз (или клавиш вверх и вниз на клавиатуре), а также щелчок по области дорожки, которая делает страницу вверх и листать вниз. Это связано с тем, что данные передаются в представление, и модель «min / max / value» для JScrollBar не будет работать для этого.

Стандартный способ обработки этих событий мыши или клавиши заключается в том, что значение полосы прокрутки регулируется либо «приращением единицы» (меньшее значение), либо «приращением блока» (большее значение). Я не хочу, чтобы полоса прокрутки меняла свое значение при нажатии ; Я просто хотел бы получить событие, говорящее «пользователь запросил прокрутку вверх на блок» или «пользователь запросил прокрутку вниз на одну единицу». Кто-нибудь знает способ сделать это?

Кстати, похоже, что BasicScrollBarUI$TrackListener.mousePressed(MouseEvent) обрабатывает щелчок, и он всегда вызывает scrollbar.setValue(newValue). Так что мне может не повезло: (

Возможно, есть способ сделать это с помощью полосы прокрутки SWT?

Ответы [ 2 ]

1 голос
/ 26 августа 2011

Я разобрался, как это сделать.Я предоставляю полосу прокрутки пользовательскому интерфейсу, который расширяет значение по умолчанию BasicScrollBarUI, но переопределяет два важных метода, которые мне нужны: scrollByBlock() и scrollByUnit().Оказывается, я могу вызвать setValue() в этих методах, не путая событие, если мне нужно.

class MyUI extends BasicScrollBarUI
{
    @Override
    protected void scrollByBlock(int direction)
    {
        System.out.println("scrollByBlock " + direction);
        // super.scrollByBlock(direction);
        scrollBar.setValue(scrollBar.getValue() + (direction * 10));
    }

    @Override
    protected void scrollByUnit(int direction)
    {
        System.out.println("scrollByUnit " + direction);
        // super.scrollByUnit(direction);
        scrollBar.setValue(scrollBar.getValue() + (direction * 3));
    }
}
1 голос
/ 25 августа 2011

Компоненты Swing используют Actions для обработки нажатий клавиш и многих событий мыши. Проверьте Привязки клавиш для списка действий, поддерживаемых полосой прокрутки.

Вы сможете заменить эти Действия своими собственными.

...