当2个jScrollPane都出现上下滚动条的时候,怎么实现两个jScrollPane怎么关联上下同步滚动,求一段实例代码...谢谢

解决方案 »

  1.   

    方法一:
    将两个 JScrollPane 的 JScrollBar 设成同一个JScrollBar 
    这个方法的好处是:完美的联动,不会有任何需要你自己去控制和计算的
    这个方法的缺陷是:只能看到一个滚动条方法二:
    分别重写两个 JScrollPane 的 JScrollBar 的 setValues 方法,去分别设置另外一个 JScrollBar 的值,比如调用另一个 JScrollBar 的 setValue 方法,注意不是调用 setValues 方法,否则就是循环调用,要死循环了。
    这个方法的好处是:两个滚动条都看得到
    这个方法的缺陷是:可能有的时候不能完美的实现联动,尤其是个JScrollPane 的大小不一样的时候,可能需要自己去试验去处理。方法三:
    方法二的一个变种,
    你只重写第一个JScrollBar 的 setValues 方法,
    设置自身和另一个 JScrollBar 的 Values
    即调用 super.setValues() 和 bar2.setValues() 
    另一个 JScrollBar 不重写 setValues 方法,而是改为监听滚轮事件,箭头点击事件,滚动条拖动事件,在这些事件里,调用 bar1.setValues()
    这样就没有循环调用了
    这个方法的好处是:两个滚动条都看得到,且处理效果比方法二略好一些
    这个方法的缺陷是:可能需要重写 JScrollBar 的 UI 类,不然你也无法获得滚动条上的箭头的引用,无法增加监听器
      

  2.   

    JScrollBar1.getJScrollBar();
    JScrollBar2.setJScrollBar();
      

  3.   

    JScrollBar2.setJScrollBar(JScrollBar1.getJScrollBar());
      

  4.   

    JScrollPane2.setJScrollBar(JScrollPane1.getJScrollBar());
    ...我表示我比较搓,写了那么多次
      

  5.   

    import java.awt.Dimension;import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.JScrollPane;
    import javax.swing.JTextArea;public class JScrollPaneSynDemo extends JFrame {

    JScrollPane scrollPane1;
    JScrollPane scrollPane2;
    JPanel mainPane;

    JScrollPaneSynDemo() {
    setSize(500, 240);
    setLocationRelativeTo(null);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    mainPane = new JPanel();
    scrollPane1 = new JScrollPane(new JTextArea("1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15"));
    scrollPane2 = new JScrollPane(new JTextArea("a\nb\nc\nd\ne\nf\ng\nh\ni\nj\nk\nl\nm\nn\no"));
    scrollPane1.setPreferredSize(new Dimension(200, 200));
    scrollPane2.setPreferredSize(new Dimension(200, 200));
    mainPane.add(scrollPane1);
    mainPane.add(scrollPane2);
    scrollPane2.setVerticalScrollBar(scrollPane1.getVerticalScrollBar());
    setContentPane(mainPane);
    setVisible(true);
    } public static void main(String... args) {
    new JScrollPaneSynDemo();
    }
    }方法一的实现