2014-10-01 79 views

回答

1

更新 - 推薦的方法 - 使用ControlsFX GridView控件

ControlsFX,第三方的JavaFX控制項目看起來有哪些符合個人需求的控制。 ControlsFX命名控件GridView。它是一個虛擬化控件,正如本答案的解決方案中所建議的那樣,但它是預先構建的,因此您不必實現自己的控件或高度自定義ListView即可獲得此行爲。

這裏是在GridView的描述(從它的Javadoc):

一個GridView是用於在視覺 ,可滾動的,柵格狀方式顯示getItems()虛擬化控制。換句話說,雖然ListView每行顯示一個ListCell,但在GridView中,單行上將有零個或多個GridCell實例。這種方法意味着實例化的GridCell實例的數量將比GridView項目列表中項目的數量小 ,因爲 僅爲 GridView的可見區域創建了足夠的GridCells。這有助於提高性能並減少內存消耗。

因爲每個GridCell都從Cell延伸,所以在其他UI控件中採用的工廠的相同方法也會在 GridView中採用。這有兩個主要優點:

  1. 柵格單元的需求,且無需用戶參與創建,
  2. 柵格單元可以任意複雜。一個簡單的GridCell可能只有其 的文本屬性集,而更復雜的GridCell可以在其圖形屬性中設置任意複雜的場景圖集(因爲它接受任何節點) 。

過時回答

而不是使用TilePane爲您的內容,可以考慮使用ListView,這是一個虛擬化的組件(例如,它只是建立並呈現其在屏幕上看到的節點,而不是所有可能的節點)。只要你正確地實現了這一點,它可能會比一個具有數千個節點的大型TilePane更有效率。如果ListView不太適合你,你可以利用ListViewSkin中的概念(你可以check out it's application source)爲你的應用程序創建你自己的類似的虛擬化佈局(不要指望它特別容易實現) 。

如何改變ListView的方向?

list.setOrientation(Orientation.HORIZONTAL)

horizonal list

但是,也許你的問題不是方向(我現在有點不清楚你實際上是在問)。

也許你想要做的是創建一個正常的,垂直定向的自定義Row對象的ListView,其中每行將包含一個HBox或單行TilePane。基本上,你需要做更多的工作來獲得你想要的表現,你不會找到一個開箱即用的控制,它將完成你想要的,並且表現良好。

不幸的是,提供完整的示例代碼來完全解決您的問題超出了StackOverflow答案的合理範圍。

+0

謝謝@jewelsea。但是如何改變ListView的方向,有點像TilePane中的方向,其中瓷磚或節點是從左到右和從上到下放置的? listView.setOrientation(..)中的可用選項是Orientation.VERTICAL和Orientation.Horizo​​ntal。 – 2014-10-02 04:56:48

+0

您能否提供一個接受特定節點或窗格的GridView示例? [在教程](http://controlsfx.bitbucket.org/org/controlsfx/control/GridView.html)中,GridView正在接受Color列表。但是當我嘗試製作一個Pane或Node的列表並在GridView的構造函數中傳遞列表時,GridView不顯示窗格或節點,而是顯示它們的類名。我懷疑這個問題與GridCell和cellFactory有關,但我不知道如何定製它們。請幫忙。 – 2014-10-06 08:21:01

+0

我明白了。 [本教程](http://docs.oracle.com/javase/8/javafx/api/javafx/scene/control/Cell.html?is-external=true)非常有幫助。 – 2014-10-06 10:11:05

相關問題