JScrollPane: отключить прокрутку с помощью перетаскивания - PullRequest
2 голосов
/ 03 ноября 2011

Я использую некоторые компоненты JGraphX, но этот вопрос может быть применен к общему назначению Java.

У меня есть компонент внутри JScrollPane. Проблема, с которой я столкнулся, заключается в том, что у меня есть возможность панорамировать вид, «захватывая» вид и перемещая его, как карты Google. но если курсор покидает область просмотра, прокрутка меняет направление. Я провел некоторое исследование и нашел проблему, вызывающую проблему. Его можно найти частично на этой странице, где он начинает рассказывать о том, как работает панель прокрутки.

http://download.oracle.com/javase/tutorial/uiswing/components/scrollpane.html

Наведите курсор на изображение и нажмите курсор. Продолжая нажмите курсор, перетащите курсор к точке за пределами изображения и сделайте паузу. видимая область изображения перемещается в направлении курсора. это функция прокрутки перетаскиванием активируется на панели прокрутки и с JComponent API, но это реализуется пользовательским компонентом который отображает изображение.

Он имеет небольшую демонстрацию, чтобы вы могли увидеть, как он работает, а также код доступен для загрузки.

Таким образом, по умолчанию на панели прокрутки реализована прокрутка для перетаскивания, но на самом деле она противоположна тому, как мне нужна моя прокрутка. Библиотека JGraphX, которую я использую, расширила большинство классов, используемых для некоторой выгоды, но основная идея все еще применима. Мне просто нужно знать, как проще всего это отключить. На странице сказано, что она включена с помощью полосы прокрутки и JComponent API, но что на самом деле активируется?

Ответы [ 2 ]

3 голосов
/ 03 ноября 2011

Не уверен, но я думаю, что вам нужно использовать:

component.setAutoscrolls( false );
2 голосов
/ 03 ноября 2011

Этот метод из JComponent выглядит как лучшая отправная точка для исследования. Вы можете получить компонент на панели прокрутки и вызвать этот метод с false на нем. Это значение по умолчанию, но, возможно, в JGraphX ​​оно включено по умолчанию.

Кроме того, вы можете получить MouseListener s и / или MouseMotionListener s из области прокрутки и заменить их чем-то, что отменяет поведение при перетаскивании. Поскольку это интерфейсы, вы можете использовать для этого proxy объекты. Кажется, что-то смешное.

...