我在我的場景中有一個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()
方法,這沒問題,但我仍然遇到滾動方向將內容向錯誤方向移動的問題。我也嘗試過EventHandler
和EventFilter
來修改相應的值,但仍然沒有解決滾動問題而不能將內容向正確的方向移動。
答案似乎很簡單,但它仍然繼續逃避我,即使經過很長時間的代碼亂七八糟。
編輯:使用ListView
解決我的問題的
jewelsea的建議。然而,我仍然好奇爲什麼使用ScrollPane
沒有那麼好。另外,我遇到了ListView
實現中奇怪的行爲:我使用一個按鈕手動將新的Label
添加到視圖。無論何時,添加新的Label
後,視圖都會凍結。在更新滾動位置或顯示新添加的Label
之前,它會鎖定幾秒鐘。我不知道這是否是因爲視圖管理大約20個左右的實例,或者是否有更危險的事情發揮作用。
任何不使用'ListView'來實現的理由?我認爲這可能會爲您解決這些問題。 – jewelsea
@jewelsea,你解決了它!我總是驚訝於大多數這些問題看起來如此之大,但他們的解決方案如此簡單。我能夠使用'ListView