获取GWT ScrollPanel以在底部启动其垂直滚动条

时间:2011-04-13 08:25:35

标签: gwt


我知道GWT ScrollPanel有一些问题及其工作原理,但请允许我解释一下情况。

我正在开发一个在路由器上实现QoS的项目。我现在处于项目的开发阶段,我需要创建一个Web界面来添加ssh和http等协议,并为它们提供带宽。

为节省内存使用量和网络流量,我不使用GWT-EXT或Smart GWT。因此,要设置带宽,我使用ScrollPanel,其中包含一个空的SimplePanel(这太大了),只留下滚动条。

现在问题在于: 我希望每个添加的协议的每个滚动条都从底部开始,而不是从顶部开始。如果我首先手动移动滚动条,然后任何函数都可以工作,如scrollToBottom()或setScrollPosition(),我可以通过代码完成它。如果我想在手动移动滚动条之前通过代码移动滚动条,但是我无法调用它上面的函数 (我会发布一张图片,但我还不能 - 新用户)

要点:

因此,如果我添加协议(使用名为btnAjouter的按钮),则每个协议的两个滑动条(一个用于保证带宽,一个用于最大带宽)从顶部开始。我希望他们从小部件加载的底部开始。 有没有办法做到这一点? 提前谢谢!

格伦

3 个答案:

答案 0 :(得分:1)

好的,我的同事找到了解决方案。不过,这是一个相当肮脏的。 问题是,只有当有问题的元素附加到DOM时,这些函数才有效。我确实用Window.alert()检查它是否附加了,它确实是。但问题是这些功能是早期调用的,例如在按钮上它会工作。元素的创建和附件都发生得非常快,因此Javascript无法跟上,这就是解决方案:

Timer t1 = new Timer()
        {
            @Override
            public void run() 
            {
                s1.getScroll().scrollToBottom();
                s2.getScroll().scrollToBottom();
            }
        };
t1.schedule(20);

使用计时器不是最干净的解决方案,但它可以工作。 s1和s2是我的自定义幻灯片栏,getScroll()获取附加到它的ScrollPanel。

答案 1 :(得分:1)

您可以扩展ScrollPanel并覆盖onLoad方法。在窗口小部件附加到浏览器的文档后立即调用此方法。

@Override
protected void onLoad() {
    scrollToBottom();
}

答案 2 :(得分:0)

你能附加一个处理程序来监听add事件吗?在这个处理程序里面做这样的事情:

panel.getElement().setScrollTop(panel.getElement().getScrollHeight());

“panel”是您添加协议的面板。它不必是ScrollPanel。 HTMLPanel可以使用。

如果需要在浏览器事件循环返回后调用此命令,则可以将此方法包装在命令中并将其传递给Schedule.scheduleDeferred

Schedule.scheduleDeferred(new Scheduler.ScheduledCommand(
  public void execute() {
    panel.getElement().setScrollTop(panel.getElement().getScrollHeight());
  }
));