我如何使用GWT创建无限滚动面板?

时间:2009-06-25 07:29:54

标签: gwt

通过无限滚动,我的意思是我最初加载一些子窗口小部件,并且当用户向下滚动时,可以加载更多以填充它。

任何想法都赞赏。

(理想情况下,想要GWT 1.6和1.5的东西)

2 个答案:

答案 0 :(得分:8)

尝试这样的事情:

public static class InfiniteScrollPanel implements ScrollHandler {
    String text = "Lorem ipsum dolor sit amet, consectetuer...";
    ScrollPanel panel = new ScrollPanel(new HTML(text));
    int height = 200;
    int width = 200;

    public InfiniteScrollPanel() {
        panel.setHeight(height);
        panel.setWidth(width);
        panel.addScrollHandler(this);  
    }
    public void onScroll(ScrollEvent event) {
        if (panel.getScrollPosition == height) {
            panel.add(new HTML(text));
        }
    }
}

此代码的作用:它创建一个ScrollPanel并向其添加ScrollHandler。在ScrollHandler中,将scrollheight与面板的高度进行比较,然后将另一个子项添加到面板中。

我没有对它进行测试,因为我在上网本上写这个并且没有IDE。

答案 1 :(得分:6)

我至少能够在GWT 1.5中确认以下工作:

final VerticalPanel vp = new VerticalPanel();
for (int i = 0; i < 40; i++) {
    vp.add(new HTML("Oh oh"));
}
final HTML f = new HTML("END");
vp.add(f);

final ScrollPanel panel = new ScrollPanel(vp);
panel.setHeight("20em");
panel.addScrollListener(new ScrollListener() {

    HTML end = f;
    public void onScroll(Widget widget, int scrollLeft, int scrollTop) {

        int finalPos = end.getAbsoluteTop() + end.getOffsetHeight(); 
        int panelPos = panel.getAbsoluteTop() + panel.getOffsetHeight();
        if (finalPos == panelPos) {
            end = new HTML("MORE !!");
            vp.add(end);
        }

    }
});

注意有趣的位是位置的计算。