2013-08-07 50 views
5

我在我的場景中有一個ScrollPane,並且想要爲它添加一系列節點。確切的金額必須是動態的。我一直在用Label節點測試這個概念,並且可以成功添加儘可能多的標籤,以滿足ScrollPane(當前是VBox)的內容。JavaFX - 以正確的滾動方向向ScrollPane添加節點

我的問題是搞清楚如何讓用戶正常滾動通過ScrollPane充滿節點。內容與滾動條一致;也就是說,當我向下滾動時,內容向下移動。我向上滾動,內容滾動。因此,如果我有10個標籤,其中只有5個標籤目前可見,那麼看到其他五個標籤的直覺行爲就是向下滾動。不幸的是,這只是將整個內容向下移動,將空白空間暴露在上面並隱藏更多標籤。

我可以張貼一些示例代碼是否有幫助,但我的進攻計劃的要點是:

ScrollPane sp = new ScrollPane(); 
VBox content = new VBox(); 
sp.setContent(content); 
for (int i = 0; i < 10; i++) 
{ 
    Label label = new Label("Label " + i); 
    content.setPrefHeight(content.getPrefHeight() + label.getPrefHeight()); 
    content.getChildren().add(label); 
} 

因爲我使用的是垂直框,標籤堆疊(Y軸)頂上一個另一個,這是我想要的。隨着更多標籤的添加,ScrollBar需要反映VBox的增大尺寸。 我已經嘗試了幾種方法來實現這個工作,包括ScrollPane.setVmax()方法,這沒問題,但我仍然遇到滾動方向將內容向錯誤方向移動的問題。我也嘗試過EventHandlerEventFilter來修改相應的值,但仍然沒有解決滾動問題而不能將內容向正確的方向移動。

答案似乎很簡單,但它仍然繼續逃避我,即使經過很長時間的代碼亂七八糟。

編輯:使用ListView解決我的問題的

jewelsea的建議。然而,我仍然好奇爲什麼使用ScrollPane沒有那麼好。另外,我遇​​到了ListView實現中奇怪的行爲:我使用一個按鈕手動將新的Label添加到視圖。無論何時,添加新的Label後,視圖都會凍結。在更新滾動位置或顯示新添加的Label之前,它會鎖定幾秒鐘。我不知道這是否是因爲視圖管理大約20個左右的實例,或者是否有更危險的事情發揮作用。

+2

任何不使用'ListView'來實現的理由?我認爲這可能會爲您解決這些問題。 – jewelsea

+2

@jewelsea,你解決了它!我總是驚訝於大多數這些問題看起來如此之大,但他們的解決方案如此簡單。我能夠使用'ListView

回答

0

關於scrollpane問題,我知道你想要做什麼是可能的,因爲我正在做一些非常相似的事情。基於上面給出的代碼片段,我會建議嘗試幾件事...

  • 給ScrollPane一個首選的高度和寬度。
  • 不要給VBox任何高度尺寸偏好設定內容,因爲它會隨其內容一起增長。添加內容後,不需要更新其高度。
  • 使用垂直框的參考setAlignment方法來調整其內容要麼TOP_LEFTTOP_CENTER,或TOP_RIGHT
  • 使用getPrefHeight()方法時,因爲如果你還沒有使用setPrefHeight()事先我相信它會返回-1一定要小心。

希望這可以幫助你!

+0

雖然它不在上面的代碼片段中,但我明確地設置了ScrollPane的尺寸(在Scene Builder和我的代碼中)。我也在切換內容的高度之間切換,並且我確實指定了一個對齊方式。經過一番更多的調整之後,我可以添加更好的東西,但我仍然無法按照自己想要的方式進行滾動。 –