让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();
}