情景,
   一个外层的JScrollPane,  我称outside-sc吧。
    outside-sc里面嵌套的很多东西,其中有另一个 JScrollPane, 我称它为internal-sc, 并且internal-sc没有垂直滚动条。问题如下:
    我把鼠标放到internal-sc 区域,上下滚动鼠标滑轮,我希望外层outside-sc的滚动条上下移动,但是事实上,它根本不动,并且只要鼠标移出internal-sc, 滚动滑轮,outside-sc的滚动条就可以上下移动。

解决方案 »

  1.   

    可不可以写个小例子上来试试啊,不太会Swing的.
      

  2.   

    把internal-sc换成一个JPanel就行了,不需要钻牛角尖
      

  3.   

    谢谢AWUSOFT, 代码还真不好整啊..谢谢 randomer, 没有钻牛角尖。internal-sc虽没有垂直滚动条,但是有水平滚动条;所以要用JScrollPane.
      

  4.   

    理解你的意思,比较难搞。
    基本情况是internal-sc截取了鼠标滑轮滚动事件,自己滚动了,outside-sc没有激发滚动事件。
    如果你的鼠标滑轮在internal-sc以外而outside-sc以内,滚动的就是outside-sc。
    而且用了JScrollPane以后,里边的组件布局比较难搞,放大后获得的长度缩小了就不会收回,而由scroll实现了,能不那么用还是别那么用吧。
      

  5.   

    对internal-sc设置setWheelScrollingEnabled(false)试试吧。
      

  6.   

    MouseWheelListener[] ls = sc.getMouseWheelListeners();
    for(MouseWheelListener l :ls)
    {
    sc.removeMouseWheelListener(l);
    }
      

  7.   

    import java.awt.Container;
    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);
    }}