1

スクロールの優先度が垂直スクロールに与えられていることがわかります。それを変えたい。それ、どうやったら出来るの?

4

2 に答える 2

2

最初の回答に感謝します-非常に役に立ちます。ただし、上記の応答の iNewValue には、ホイール マウスによって実際に回転された個別のホイール マウス セグメントの数である evt.getWheelRotation() 値を掛ける必要があることがわかりました。

また、スクロールするタイミングの条件もこれを考慮する必要があります - 条件は evt.getWheelRotation() <= -1 または evt.getWheelRotation() >= 1 でなければなりません

これは私のために働いた更新された例です。

    import java.awt.Component;
    import java.awt.event.MouseAdapter;
    import java.awt.event.MouseWheelEvent;
    import javax.swing.JScrollBar;
    import javax.swing.JScrollPane;
    class MyJScrollPane extends JScrollPane 
    {



        public MyJScrollPane(Component component)
        {
            super(component);
            final JScrollBar horizontalScrollBar = getHorizontalScrollBar();
            final JScrollBar verticalScrollBar = getVerticalScrollBar();
            setWheelScrollingEnabled(false);
            addMouseWheelListener(new MouseAdapter()
            {
                public void mouseWheelMoved(MouseWheelEvent evt)
                {

                    if (evt.getWheelRotation() >= 1)//mouse wheel was rotated down/ towards the user
                    {
                        int iScrollAmount = evt.getScrollAmount();
                        int iNewValue = horizontalScrollBar.getValue() + horizontalScrollBar.getBlockIncrement() * iScrollAmount * Math.abs(evt.getWheelRotation());
                        if (iNewValue <= horizontalScrollBar.getMaximum())
                        {
                            horizontalScrollBar.setValue(iNewValue);
                        }
                    }
                    else if (evt.getWheelRotation() <= -1)//mouse wheel was rotated up/away from the user
                    {
                        int iScrollAmount = evt.getScrollAmount();
                        int iNewValue = horizontalScrollBar.getValue() - horizontalScrollBar.getBlockIncrement() * iScrollAmount * Math.abs(evt.getWheelRotation());
                        if (iNewValue >= 0)
                        {
                            horizontalScrollBar.setValue(iNewValue);
                        }
                    }
                }
            });
        }
    }
于 2013-01-23T00:22:04.420 に答える
0

のデフォルトのスクロール優先度を変更するにはJScrollPane、独自のバージョンを作成する必要がJScrollPaneあり、マウス ホイールを動かすとScrollBar、垂直ではなく水平が動作するようになりますScrollBar

JScrollPane のオーバーライドされたバージョンは、次のように作成できます。

import javax.swing.JScrollPane;
import javax.swing.JScrollBar;
import java.awt.Component;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseWheelListener;
import java.awt.event.MouseWheelEvent;

class MyJScrollPane extends JScrollPane 
{
    public MyJScrollPane(Component component)
    {
        super(component);
        final JScrollBar horizontalScrollBar = getHorizontalScrollBar();
        final JScrollBar verticalScrollBar = getVerticalScrollBar();
        setWheelScrollingEnabled(false);
        addMouseWheelListener(new MouseAdapter()
        {
            public void mouseWheelMoved(MouseWheelEvent evt)
            {
                if (evt.getWheelRotation() == 1)//mouse wheel was rotated down/ towards the user
                {
                    int iScrollAmount = evt.getScrollAmount();
                    int iNewValue = horizontalScrollBar.getValue() + horizontalScrollBar.getBlockIncrement() * iScrollAmount;
                    if (iNewValue <= horizontalScrollBar.getMaximum())
                    {
                        horizontalScrollBar.setValue(iNewValue);
                    }
                }
                else if (evt.getWheelRotation() == -1)//mouse wheel was rotated up/away from the user
                {
                    int iScrollAmount = evt.getScrollAmount();
                    int iNewValue = horizontalScrollBar.getValue() - horizontalScrollBar.getBlockIncrement() * iScrollAmount;
                    if (iNewValue >= 0)
                    {
                        horizontalScrollBar.setValue(iNewValue);
                    }
                }
            }
        });
    }
}

これで のスクロール優先度の問題が解決することを願っていますJScrollPane

于 2013-01-22T18:41:39.987 に答える