我知道GWT ScrollPanel有一些问题及其工作原理,但请允许我解释一下情况。
我正在开发一个在路由器上实现QoS的项目。我现在处于项目的开发阶段,我需要创建一个Web界面来添加ssh和http等协议,并为它们提供带宽。
为节省内存使用量和网络流量,我不使用GWT-EXT或Smart GWT。因此,要设置带宽,我使用ScrollPanel,其中包含一个空的SimplePanel(这太大了),只留下滚动条。
现在问题在于: 我希望每个添加的协议的每个滚动条都从底部开始,而不是从顶部开始。如果我首先手动移动滚动条,然后任何函数都可以工作,如scrollToBottom()或setScrollPosition(),我可以通过代码完成它。如果我想在手动移动滚动条之前通过代码移动滚动条,但是我无法调用它上面的函数 (我会发布一张图片,但我还不能 - 新用户)
要点:
因此,如果我添加协议(使用名为btnAjouter的按钮),则每个协议的两个滑动条(一个用于保证带宽,一个用于最大带宽)从顶部开始。我希望他们从小部件加载的底部开始。 有没有办法做到这一点? 提前谢谢!
格伦
答案 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());
}
));