1

私は新しいアプリケーションで JavaFX を使い始めており、WPF の UniformGrid と同じレイアウトを画面に表示したいと考えています。TilePane がありますが、違います (WrapPanel に似ていると思います)。

これまでの私のアプローチは次のようになります(コレクション[サイズ= N]の場合、「タイル」として表示したい):

  1. TilePane t を使用します。
  2. t.setPrefRows(ROUNDUP(sqrt(N)))

それはおそらく最善のアプローチではありません。より良い解決策を知っていますか?多分サイズ変更可能なもの?

4

1 に答える 1

2

次のレイアウトが必要なようです。

  1. 各行に一定数のセル ノードがあります。
  2. 各セル ノードの高さと幅は同じです。

私はWPFやUniformGridに精通していませんが、上記があなたが望むものだと思います。

TilePane は適切ではない可能性が高い

これにはTilePaneが適しているように思えますが、おわかりのように、最初からこの動作を実際に示すわけではありません。TilePane では、適切な行数を設定しますが、TilePane のサイズを変更すると、使用可能な領域に合わせてタイルが再配置されるため、行数と列数が変化する可能性があります。

バインディングとプリファレンスの設定または制約で GridPane を使用する

行ごとに一定数のセルを取得するには、GridPaneを使用します。GridPane は、サイズ変更時に固定数の行と列を保持します。各セル ノードの高さと幅が同じであることを確認するには、GridPane の高さと幅のプロパティをリッスンし、変更時に子要素の最小/最大/優先サイズを設定して、すべて同じサイズになるようにします。 . または、GridPane の行と列にsetPercentWidthsetPercentHeightなどの制約を設定します。

このアプローチを示すために、ColorChooser サンプルは、サイズ変更可能な ColorChooserのコードを提供し、グリッド行ごとに一定数の色見本を持ち、含まれるグリッド全体が拡大または縮小すると、利用可能な領域に合わせて色見本が拡大または縮小されます。適切な。色見本自体は必ずしも同じ高さと幅の比率を維持するとは限りませんが、子要素に適切な最小/最大/優先サイズを設定することで簡単に実現できます。

小さいグリッド  ミディアムグリッド

独自のレイアウトを作成する

変更リスナーを使用して子に最小/最大/優先サイズを設定する代わりに、Paneをサブクラス化して UniformGrid クラスを作成し、layoutChildrenメソッドを実装することで、独自のレイアウト マネージャーを実装できます。layoutChildren では、UniformGrid の子のサイズと位置を必要に応じて調整します。既存のペインのソース コードを参照して、独自のレイアウトを作成する方法の例を見つけることができます。

サードパーティのレイアウトを調査する

ControlsFX プロジェクトには、UniformGrid の機能を提供する可能性のあるGridViewまたはMigLayoutがあります。

于 2013-06-11T23:46:37.113 に答える