情景,
一个外层的JScrollPane, 我称outside-sc吧。
outside-sc里面嵌套的很多东西,其中有另一个 JScrollPane, 我称它为internal-sc, 并且internal-sc没有垂直滚动条。问题如下:
我把鼠标放到internal-sc 区域,上下滚动鼠标滑轮,我希望外层outside-sc的滚动条上下移动,但是事实上,它根本不动,并且只要鼠标移出internal-sc, 滚动滑轮,outside-sc的滚动条就可以上下移动。
一个外层的JScrollPane, 我称outside-sc吧。
outside-sc里面嵌套的很多东西,其中有另一个 JScrollPane, 我称它为internal-sc, 并且internal-sc没有垂直滚动条。问题如下:
我把鼠标放到internal-sc 区域,上下滚动鼠标滑轮,我希望外层outside-sc的滚动条上下移动,但是事实上,它根本不动,并且只要鼠标移出internal-sc, 滚动滑轮,outside-sc的滚动条就可以上下移动。
基本情况是internal-sc截取了鼠标滑轮滚动事件,自己滚动了,outside-sc没有激发滚动事件。
如果你的鼠标滑轮在internal-sc以外而outside-sc以内,滚动的就是outside-sc。
而且用了JScrollPane以后,里边的组件布局比较难搞,放大后获得的长度缩小了就不会收回,而由scroll实现了,能不那么用还是别那么用吧。
for(MouseWheelListener l :ls)
{
sc.removeMouseWheelListener(l);
}
import java.awt.GridBagLayout;
import java.awt.GridLayout;
import java.awt.event.MouseWheelListener;import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;public class SubString
{ /**
* @param args
*/
public static void main(String[] args)
{
JFrame frame = new JFrame("获取字符");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); Container c = frame.getContentPane();
final JPanel p = new JPanel(new GridLayout(7, 1));
final JScrollPane scouter = new JScrollPane();
scouter
.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
scouter.setViewportView(p);
c.add(scouter); final JPanel pnlInput = new JPanel(new GridBagLayout());
p.add(pnlInput); final JScrollPane sc = new JScrollPane();
sc.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
final JTextArea taOutput = new JTextArea();
sc.setViewportView(taOutput);
p.add(sc);
MouseWheelListener[] ls = sc.getMouseWheelListeners();
for (MouseWheelListener l : ls)
{
sc.removeMouseWheelListener(l);
}
p.add(new JButton("a"));
p.add(new JButton("b"));
p.add(new JButton("c"));
p.add(new JButton("d"));
p.add(new JButton("e")); frame.setSize(300, 175);
frame.setVisible(true);
}}