如何将Java Swing JScrollPane鼠标滚轮优先级更改为水平滚动?
我现在可以看到滚动优先权被赋予垂直滚动。我想改变这一点。如何操作?要更改如何将Java Swing JScrollPane鼠标滚轮优先级更改为水平滚动?,java,swing,jscrollpane,Java,Swing,Jscrollpane,我现在可以看到滚动优先权被赋予垂直滚动。我想改变这一点。如何操作?要更改JScrollPane的默认滚动优先级,您需要创建自己版本的JScrollPane,当移动鼠标滚轮时,强制执行水平滚动条而不是垂直滚动条 JScrollPane的重写版本可以如下创建: import javax.swing.JScrollPane; import javax.swing.JScrollBar; import java.awt.Component; import java.awt.event.MouseAdap
JScrollPane
的默认滚动优先级,您需要创建自己版本的JScrollPane
,当移动鼠标滚轮时,强制执行水平滚动条
而不是垂直滚动条
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);
}
}
}
});
}
}
import javax.swing.JScrollPane;
导入javax.swing.JScrollBar;
导入java.awt.Component;
导入java.awt.event.MouseAdapter;
导入java.awt.event.MouseWheelListener;
导入java.awt.event.mouseweelEvent;
类MyJScrollPane扩展了JScrollPane
{
公共MyJScrollPane(组件)
{
超级(组件);
最终JScrollBar horizontalScrollBar=getHorizontalScrollBar();
最终JScrollBar verticalScrollBar=getVerticalScrollBar();
setWheelScrollingEnabled(假);
addMouseWheelListener(新的MouseAdapter()
{
公共无效mouseWheelMoved(MouseWheelEvent evt)
{
if(evt.getWheelRotation()==1)//鼠标滚轮向下/朝向用户旋转
{
int iscrollmount=evt.getScrollmount();
int iNewValue=horizontalScrollBar.getValue()+horizontalScrollBar.getBlockIncrement()*iScrollAmount;
如果(iNewValue=0)
{
水平滚动条。设置值(iNewValue);
}
}
}
});
}
}
我希望这能解决您滚动
JScrollPane
优先级的问题,感谢第一个答案-非常有用。但是我发现上面响应中的iNewValue需要乘以evt.getWheelRotation()值,这是滚轮鼠标实际旋转的不同滚轮鼠标段的数量
此外,何时滚动的条件也需要考虑到这一点-条件必须是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);
}
}
}
});
}
}
导入java.awt.Component;
导入java.awt.event.MouseAdapter;
导入java.awt.event.mouseweelEvent;
导入javax.swing.JScrollBar;
导入javax.swing.JScrollPane;
类MyJScrollPane扩展了JScrollPane
{
公共MyJScrollPane(组件)
{
超级(组件);
最终JScrollBar horizontalScrollBar=getHorizontalScrollBar();
最终JScrollBar verticalScrollBar=getVerticalScrollBar();
setWheelScrollingEnabled(假);
addMouseWheelListener(新的MouseAdapter()
{
公共无效mouseWheelMoved(MouseWheelEvent evt)
{
如果(evt.getWheelRotation()>=1)//鼠标滚轮向下/朝向用户旋转
{
int iscrollmount=evt.getScrollmount();
int iNewValue=horizontalScrollBar.getValue()+horizontalScrollBar.getBlockIncrement()*iScrollAmount*Math.abs(evt.getWheelRotation());
如果(JTextComponents的iNewValue、JList或JTable或……(在此表格中)此问题不可回答