所以,你已經設置了每個行和列的填充,這意味着網格中每個元素的所有邊上會有10px的空間。然後你在第10列中添加了一些東西。這將創建所有0-9列,寬度和高度爲0,因爲它們沒有內容。但是,由於它們的填充,它們每個佔用大約20x20像素的正方形。當你將這些空間添加到這些空間中時,他們當然會移動你的對象,因爲它們現在佔用了空間。
而不是使用填充來創建您的列和行的寬度和高度,請考慮ColumnConstraints
和RowConstraints
。我在下面添加了它們的使用文檔。
從GridPane documentation:
行/列寬
默認情況下,行和列將調整大小以適合其內容;一列將足夠寬以容納最寬的孩子,一行足夠高以適合最高的孩子。但是,如果應用程序需要顯式控制行或列的大小,則可以通過添加RowConstraints和ColumnConstraints對象來指定這些指標。例如,爲了創建一個網格具有兩個固定寬度的列:
GridPane gridpane = new GridPane();
gridpane.getColumnConstraints().add(new ColumnConstraints(100)); // column 0 is 100 wide
gridpane.getColumnConstraints().add(new ColumnConstraints(200)); // column 1 is 200 wide
默認情況下,gridpane將調整行/列到它們的優選的尺寸(無論是從內容計算的或固定的),即使gridpane調整大小較大比它的首選尺寸。如果應用程序需要增加特定行或列以增加空間,則可以在RowConstraints或ColumnConstraints對象上設置其增長優先級。例如:
GridPane gridpane = new GridPane();
ColumnConstraints column1 = new ColumnConstraints(100,100,Double.MAX_VALUE);
column1.setHgrow(Priority.ALWAYS);
ColumnConstraints column2 = new ColumnConstraints(100);
gridpane.getColumnConstraints().addAll(column1, column2); // first column gets any extra width
注意:跨越多行/列的節點也將大小爲首選大小。受影響的行/列按以下優先級調整大小:增加優先級,最後一行。這是關於行/列約束的。
百分比來調整
另外,RowConstraints和ColumnConstraints允許指定的大小爲gridpane的可用空間的百分比:
GridPane gridpane = new GridPane();
ColumnConstraints column1 = new ColumnConstraints();
column1.setPercentWidth(50);
ColumnConstraints column2 = new ColumnConstraints();
column2.setPercentWidth(50);
gridpane.getColumnConstraints().addAll(column1, column2); // each get 50% of width
如果一個百分比值被設置在一個行/列,那麼該值先行,行/列的min,pref,max和grow約束將被忽略。 請注意,如果widthPercent(或heightPercent)值的總和大於100,則這些值將被視爲權重。例如如果3列的寬度都是50,那麼每一列將被分配1/3的網格可用寬度(50 /(50 + 50 + 50))。
混合尺寸類型
的申請,可自由地混合的大小類型的行/列的(從內容計算的,固定的或百分比)。首先基於它們的可用空間百分比(大小減去插入和間隔),百分比行/列將被首先分配空間。剩下的空間將被分配給給定最小尺寸,首選尺寸和最大尺寸的行/列,並增加優先級。
創建一個演示問題的[MCVE],並且[編輯]您的問題以包含它。您發佈的代碼與您所描述的任何問題都沒有對應(一方面,您只有一個節點添加到網格窗格中)。 –