IT story

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

hot-time 2020. 9. 2. 20:54
반응형

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


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

어떤 아이디어?


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

myJScrollPane.getVerticalScrollBar().setUnitIncrement(16);

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

scrollPane.getVerticalScrollBar().setUnitIncrement(20);

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


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

yourScrollPane.getVerticalScrollBar().setUnitIncrement(16);

빠른 검색으로이 페이지 가 표시되었습니다 . 마우스 휠 사용자를 위해 JScrollPane 스크롤 속도를 높이는 방법 . 스크롤 증가분은 JScrollBar.setUnitIncrement스크롤 창이 아니라 스크롤 막대 자체 ( ) 의 속성입니다 .


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

이 시도

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


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

SwingUtil.setScrollUnitIncrement(yourScrollPane);


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

  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의 증가가 필요합니다. 그렇지 않으면 스크롤되는 줄의 수가 화면 크기로 제한됩니다.

참고 URL : https://stackoverflow.com/questions/5583495/how-do-i-speed-up-the-scroll-speed-in-a-jscrollpane-when-using-the-mouse-wheel

반응형