让GWT ScrollPanel从底部开始它的垂直滚动条




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

我正在做一个在路由器上实现QoS的项目。我现在正处于该项目的开发阶段,我需要制作一个网络接口来添加ssh和http等协议,并为它们提供带宽。

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

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

摘要:

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

Glenn

好吧,我的同事找到了解决方案。不过,这是一个相当脏的。问题是,只有当有问题的元素附加到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附加到它上。

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

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

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

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

"面板"是您将协议添加到的面板。它不必是ScrollPanel。HTMLPanel可以工作。

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

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

最新更新