スクロールの優先度が垂直スクロールに与えられていることがわかります。それを変えたい。それ、どうやったら出来るの?
質問する
1931 次
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 に答える