マウスホイールを使用しているときにJScrollPaneのスクロール速度を上げるにはどうすればよいですか?


94

JScrollPane.setWheelScrollingEnabled(boolean)マウスホイールのスクロールを有効または無効にする方法が表示されます。スクロールの速度を調整する方法はありますか?私の意見では、それは途方もなく遅いです。ウィンドウのサイズに関係なく、スクロールは1クリックあたり約3ピクセルです。それ以上になりたいです。

何か案は?


4
注:これに相当するJava スクリプトをお探しの方は、jScrollPane(jQuery)でマウスホイール高速化するを参照してください。
Boann 2013年

回答:


191

あなたはこれを試すことができます:

myJScrollPane.getVerticalScrollBar().setUnitIncrement(16);

2
綺麗な。また、これがスクロールバーの上矢印と下矢印に影響することにも気付きました。これも非常に望ましいことです。
エリックロバートソン

1
@AlizainPrasla-このスクロールパネルを初期化するとき。
StKiller 2013年

スクロールボックスとスクロールバーの上矢印または下矢印の間の領域のクリックにこれをどのように影響しますか?
ルーン

@Rune-単位の増分値を無視して、スクロールバーがマウスの位置に設定されているようです。
StKiller 2013

@AndreiPodoprîgoraこの値を変更すると、マウスホイール(またはスクロールが可能な別のデバイス)、矢印キー、およびスクロールバーの矢印でスクロールするときのスクロール速度のみが変更されることに注意してください。この値は、スクロールバーノブをドラッグしたときのスクロールペインの移動速度には影響しません。この値を変更するのは非常に困難です。これを実現したい場合は、カスタム調整リスナーをスクロールバーに追加して、その値を変更する必要があります。
TimVisée2013年

12

1つの方法は、スクロールバーの単位増分をより大きい数に設定することです。

scrollPane.getVerticalScrollBar().setUnitIncrement(20);

10

スクロールバーユニットの量に関係なくマウスホイールのスクロール量を設定したい場合は、マウスホイールコントローラーを使用できます


これにより、コードを1行も書くのではなく、プロジェクトに追加のクラスを含める必要があるという利点は何ですか?
エリックロバートソン

2
@ErickRobertson、それはあなたに追加の柔軟性を与えることを意図したものです。デフォルトでは、スクロールは単位増分値の3倍になります。たとえばJTableの場合、単位の増分はデフォルトで行の高さになり、デフォルトのスクロールは3行になります。何らかの理由で一度に1ページずつ、または一度に5行ずつスクロールする必要がある場合は、ユニット値を操作するだけでページをスクロールできません。また、デフォルトの行の高さは、LAFごとに異なる場合があります。相対的にスクロール量を操作することにより、クロスプラットフォームのサポートが向上します。
camickr

値「3」(スクロールする単位)はシステムコントロールパネルから取得されます。これはJavaの栄誉であり、システム全体で変更できます。
ルークアッシャーウッド16

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ですか?
クレオパトラ2013

-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にシフトキー付きの水平スクロールを追加したと確信しています。賛成票:解決策が現在機能している場合は反対票を削除するか、コメントを投稿してまだ足りないものを説明してください。
rychu 2017年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.