마우스 휠을 사용할 때 JScrollPane에서 스크롤 속도를 높이는 방법은 무엇입니까?


94

JScrollPane.setWheelScrollingEnabled(boolean)마우스 휠 스크롤을 활성화 또는 비활성화 하는 방법 이 있습니다. 그래도 스크롤 속도를 조정할 수있는 방법이 있습니까? 제 생각에는 말도 안되게 느립니다. 창 크기에 관계없이 스크롤은 클릭당 약 3 픽셀입니다. 그 이상이되고 싶습니다.

어떤 아이디어?


4
참고 : 이에 상응 하는 Java 스크립트를 찾는 사람 은 jScrollPane (jQuery)에서 마우스 휠 속도 높이기를 참조하십시오 .
Boann

답변:


191

이것을 시도 할 수 있습니다.

myJScrollPane.getVerticalScrollBar().setUnitIncrement(16);

2
아름다운. 또한 이것이 스크롤 막대의 위쪽 및 아래쪽 화살표에 영향을 미치는 것으로 나타났습니다.
Erick Robertson 2011

1
@AlizainPrasla-이 스크롤 패널을 초기화 할 때.
StKiller 2013 년

스크롤 상자와 스크롤 막대의 위쪽 또는 아래쪽 화살표 사이의 영역을 클릭하는데도 어떤 영향을 미칠까요?
Rune

@Rune-스크롤바가 마우스 위치로 설정되어 있고 단위 증가 값을 무시한 것 같습니다.
StKiller 2013-08-28

@ AndreiPodoprîgora이 값을 변경하면 마우스 휠 (또는 스크롤을 허용하는 다른 장치), 화살표 키 및 스크롤 막대 화살표로 스크롤 할 때만 스크롤 속도가 변경된다는 점에 유의해야합니다. 이 값은 스크롤 막대 노브를 드래그 할 때 스크롤 창이 이동하는 속도에 영향을주지 않습니다. 이 값을 변경하는 것은 매우 어렵습니다. 이를 달성하려면 스크롤바에 사용자 지정 조정 리스너를 추가하고 값을 변경해야합니다.
Tim Visée 2013

12

한 가지 방법은 스크롤바의 단위 증분을 더 큰 숫자로 설정하는 것입니다.

scrollPane.getVerticalScrollBar().setUnitIncrement(20);

10

스크롤바 단위 amout에 관계없이 마우스 휠 스크롤 양을 설정하려면 마우스 휠 컨트롤러를 사용할 수 있습니다 .


코드 한 줄을 작성하는 대신 프로젝트에 추가 클래스를 포함해야한다는 이점은 무엇입니까?
Erick Robertson

2
@ErickRobertson, 그것은 당신에게 더 많은 유연성을 제공하기위한 것입니다. 기본값은 스크롤링이 단위 증가 값의 3 배입니다. 예를 들어 JTable의 경우 단위 증분은 기본적으로 행 높이로 설정되고 기본 스크롤링은 3 행이됩니다. 어떤 이유로 한 번에 페이지를 스크롤하거나 한 번에 5 개 행을 스크롤해야하는 경우 단위 값을 조작하는 것만으로도 그럴 수 없습니다. 또한 기본 행 높이는 각 LAF마다 다를 수 있습니다. 상대적으로 스크롤 양을 조작하면 크로스 플랫폼 지원이 향상됩니다.
camickr

값 '3'(스크롤 할 단위)은 Java가 인정하는 시스템 제어판에서 가져 오므로 시스템 전체에서 수정할 수 있습니다.
누가 복음 Usherwood

9

ScrollBar의 단위 증분을 설정하여이를 수행 할 수 있습니다. 예를 참조하십시오.

yourScrollPane.getVerticalScrollBar().setUnitIncrement(16);


0

내 ScrollPane에서 32000 줄을 읽는 더 나은 방법을 찾으려고했습니다.

이 시도

scrollPane.getVerticalScrollBar().setUnitIncrement(100); scrollPane.getViewport().putClientProperty("EnableWindowBlit", Boolean.TRUE); scrollPane.getViewport().setScrollMode(JViewport.BACKINGSTORE_SCROLL_MODE);


0

보다 정확한 제어를 위해 스크롤되는 구성 요소는 Scrollable 인터페이스를 구현할 수 있습니다. 이를 통해 스크롤 장치 크기 (화살표 버튼 및 화살표 키)와 스크롤 블록 크기 (마우스 휠)를 동적으로 계산할 수 있습니다.

스크롤 창 사용 방법


-1

이것을 사용할 수도 있습니다.

SwingUtil.setScrollUnitIncrement(yourScrollPane);


흠 ... SwingUtil은 무엇입니까? 메서드가 주어진 scrollPane의 증분을 설정한다고 가정하면-어떤 값과 어떤 scrollBar?
kleopatra

-1

스크롤 속도를 높이는 내 솔루션 :

  1. 스크롤바의 매개 변수 추가 :

    scrollPane.getVerticalScrollBar (). putClientProperty ( "JScrollBar.fastWheelScrolling", true);

  2. 휠 리스너를 구현합니다 (jViewport 내부 구성 요소에서) :

    public void mouseWheelMoved(MouseWheelEvent e) {
        boolean isCtrl = (e.getModifiersEx() & MouseWheelEvent.CTRL_DOWN_MASK) != 0;
        boolean isShift = (e.getModifiersEx() & MouseWheelEvent.SHIFT_DOWN_MASK) != 0;
    
        MouseWheelEvent eventToDispatch = e;
        if (isCtrl || isShift) {
            int amountMulti = 1;
            int rotMulti = 1;
            if (isCtrl) {
                amountMulti *= 10;
                if (isShift) {
                    amountMulti *= 5;
                    rotMulti *= 2;
                }
            }
            int mod = e.getModifiers() & ~InputEvent.CTRL_MASK & ~InputEvent.SHIFT_MASK;
            int modEx = e.getModifiersEx() & ~MouseWheelEvent.CTRL_DOWN_MASK & ~MouseWheelEvent.SHIFT_DOWN_MASK;
            eventToDispatch = new MouseWheelEvent(this, e.getID(), e.getWhen()
             , mod | modEx, e.getX(), e.getY()
             , e.getXOnScreen(), e.getYOnScreen(), e.getClickCount(), e.isPopupTrigger()
             , e.getScrollType(), e.getScrollAmount()*amountMulti, e.getWheelRotation()*rotMulti
             , e.getPreciseWheelRotation()*amountMulti*rotMulti);
        }
    
        getParent().dispatchEvent(eventToDispatch);
    }

    wheelRotation의 증가가 필요합니다. 그렇지 않으면 스크롤되는 줄의 수가 화면 크기로 제한됩니다.


가로 스크롤을 방지하기 위해 SHIFT 및 CTRL 플래그가 제거되도록 코드를 수정했습니다. 나는 jdk 사람들이 내 원래 게시물 직후 jdk에 shift 키를 사용하여 수평 스크롤을 추가했다고 확신합니다. 반대 투표자 : 해결책이 현재 효과가있는 경우 반대 투표를 제거하거나 의견을 게시하고 여전히 누락 된 사항을 설명하십시오.
rychu
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.