2011-04-13 84 views
1


我知道GWT ScrollPanel中存在一些問題,以及它如何工作,但讓我解釋一下情況。獲取GWT ScrollPanel在底部啓動其垂直滾動條

我工作的一個項目,以實現對路由器的QoS。我現在處於項目的開發階段,我需要創建一個web界面來添加諸如ssh和http等協議,併爲他們提供帶寬。

爲了節省內存的使用和網絡流量,我不使用GWT-EXT或智能GWT。因此,爲了設置帶寬,我使用了一個ScrollPanel和一個空的SimplePanel(這太大了),只剩下滾動條。

現在,這裏的問題: 我希望每個滾動條爲每個加入協議的底部,而不是頂部開始。如果我先手動移動滾動條,那麼任何函數都可以工作,如scrollToBottom()或setScrollPosition(),我可以通過代碼獲得它的工作。如果我想在手動移動滾動條之前通過代碼移動滾動條,但是,我無法調用它的功能。
(我會發布圖片,但我還不能 - 新用戶)

摘要:

所以,如果我加上協議(使用稱爲btnAjouter按鈕)一對,兩個slidebars(保證帶寬和一個最大帶寬),每個協議從頂部開始。我希望他們從小部件的負載開始。 有沒有辦法做到這一點? 在此先感謝!

格倫

回答

0

你能附加一個處理程序監聽添加事件和處理程序中做這樣的事情:

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

「面板」是您在協議添加到面板。它不一定是一個ScrollPanel。 HTMLPanel將起作用。

你可以用一個命令這個方法,它是否需要瀏覽器事件循環返回後,被稱爲傳遞給Schedule.scheduleDeferred

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

+0

這並沒有工作,但只是因爲Javascript無法跟上... – Glenn 2011-04-15 08:01:19

+0

在這種情況下,也許可以創建一個命令來封裝此函數並將其傳遞給Scheduler.scheduleDeferred(http://google-web-toolkit.googlecode.com/svn/javadoc/latest/com/google/gwt/core /client/Scheduler.html#scheduleDeferred(com.google.gwt.core.client.Scheduler.ScheduledCommand) – smallbec 2011-04-16 08:12:16

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

您可以擴展ScrollPanel並重寫的onLoad方法。在小部件連接到瀏覽器的文檔後立即調用此方法。

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