Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
让GWT ScrollPanel启动底部的垂直滚动条_Gwt - Fatal编程技术网

让GWT ScrollPanel启动底部的垂直滚动条

让GWT ScrollPanel启动底部的垂直滚动条,gwt,Gwt,我知道关于GWT ScrollPanel及其工作原理还有一些问题,但请允许我解释一下情况 我正在做一个在路由器上实现QoS的项目。我现在正处于项目的开发阶段,我需要制作一个webinterface来添加ssh和http等协议,并为它们提供带宽 为了节省内存使用和网络流量,我不使用GWT-EXT或Smart GWT。因此,为了设置带宽,我使用了一个滚动面板,其中有一个空的SimplePanel(太大了),只留下滚动条 现在问题来了: 我希望每个添加协议的滚动条从底部开始,而不是从顶部开始。如果我先


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

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

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

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

摘要:

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


Glenn

您是否可以附加一个处理程序来侦听add事件,并在该处理程序中执行以下操作:


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

“面板”是您将协议添加到的面板。它不必是滚动面板。HTMLPanel可以工作

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

Schedule.ScheduledDeferred(新建Scheduler.ScheduledCommand(
public void execute(){
panel.getElement().setScrollTop(panel.getElement().getScrollHeight());
}
));

好的,我的同事找到了解决办法。这是一个相当肮脏的,虽然。 问题是,只有当所讨论的元素附加到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();
}

在这种情况下,您可以创建一个命令来包装此函数并将其传递给Scheduler.scheduleDeferred(
@Override
protected void onLoad() {
    scrollToBottom();
}