2017-06-03 16 views
0

私は動的にたくさんのボタンを作成しました。私はそれぞれに一定の幅を与えました。私はスペースが親に利用可能になるまでそれを追加したいと思っています。そして、それが他のノードと重なった場合、衝突を回避するために自動的に次の行に行きます。さまざまな画面サイズで反応するようにしたい。javafxに動的に追加されたボタンの配置

for(Data i:datas){ 
    Button btn=new Button(i.getName()); 
    anchorPane.getChildren().addAll(btn); 
} 

最初の行のボタンの幅が全部になっている場合にのみ、新しい行にボタンを配置したいと考えています。どうしたらいいですか?どんな助けもありがとうございます。

+2

[ 'FlowPane'](http://docs.oracle.com/javase/8/javafx/api/javafx/scene/layout/FlowPane.html)を使用します。より一般的には、[レイアウトチュートリアル](http://docs.oracle.com/javase/8/javafx/layout-tutorial/builtin_layouts.htm#JFXLY102)を読んで、利用可能なさまざまなレイアウトペインの概要を確認してください。 –

答えて

0

James_Dはすばらしいリソースを提供しました。必要なものはレイアウトに組み込まれていて、FlowPaneは必要なものを持っています。あなたの例を使用して

は、ちょうどFlowPaneのためにあなたのAnchorPaneをスワップアウト:

FlowPane flowPane = new FlowPane(); 

for(Data i:datas){ 
    Button btn=new Button(i.getName()); 
    flowPane.getChildren().addAll(btn); 
} 

それが応答にするために(すなわち拡張し、親コンテナ/段階との契約)、そののものにFlowPaneの幅と高さをバインド親:

flowPane.prefWidthProperty().bind(stage.widthProperty()); 
flowPane.prefHeightProperty().bind(stage.heightProperty()); 
+0

実際にフローペインの幅と高さをバインドする必要はありません。フローペインの親に対して適切なレイアウトペインを使用してください(必要に応じていくつかの設定で)。 –

+0

あなたはそうです。ほとんどの場合、AnchorPaneまたはGridPaneに配置すると、サイズ変更が処理されます。 – corpico

関連する問題