1。一个jtree(全部展开可能有几百行)放在一个scrollpane中,scrollpane放在一个jframe中。我希望每次拉动滚动条的时候总能动态的选择在scrollpane中我能看到的第一行和能看到的最后一行。
2。另外一个问题,我用getVisibleRowCount()来获取现在能看到的行数的时候。理论上说改变jframe的大小的时候,这个getVisibleRowCount()返回值应该不同,但是我把jframe最大化的时候和原来的返回值一样,应该怎么样在窗体大小改变的时候更新这个getVisibleRowCount()的返回值呢。
这两个问题困扰了我好多天了,各位大牛帮忙解决一下,拜托了!

解决方案 »

  1.   

    你试试这个办法。现在实现的是总是选择第一行。还不是很精确,你需要调整ox的值,以确保在此位置能够选定该行。打个比方说,你cell的右侧边缘的水平位置是50,如果你把ox设为60,就无效。同样,如果其左侧位置是20,而ox值为10,也选不中。如果要选择最后一行,你获得TreeView的高度,再适当减去一点,应该就可以了。作为一个思路,应该还过得去。
    treeView.getVerticalScrollBar().addAdjustmentListener(
        new AdjustmentListener() {
            public void adjustmentValueChanged(AdjustmentEvent e){
                int ox = 40, oy=10;
                int lastPos = 0;
                
                int pos = e.getValue();
                
                int row = tree.getRowForLocation(ox, oy + (pos - lastPos));
                if (row > -1) {
                    tree.setSelectionRow(row);    
                }
                
                lastPos = pos;
            }
        });
      

  2.   

    有了。在每次事件被触发的时候,在Tree的宽度范围内,从一个初值开始,每次步进一定的间隔,以调整ox的值,直到找到row为止。呵呵,笨办法。