2017-06-03 76 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具有您想要的功能。

使用你的榜樣,只是交換了你的AnchorPane爲FlowPane:

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