2017-10-18 278 views
-1

我是初學java學生,我必須在java fx中創建簡單的遊戲。 我想學習這一點,而不是使用模板或遊戲的其他作者。 我有GridPane的問題。所以我的應用程序中有8個元素。文字,標籤和圖像,但我的問題是在舞臺上安排元素。例如,如果我嘗試位置一個元素,其他元素失去位置。我做錯了什麼?JavaFX中元素的位置 - GridPane

代碼:

grid.setHgap(20); 
    grid.setVgap(20); 
    grid.setPadding(new Insets(10, 10, 10 ,10)); 
    grid.add(welcome, 10, 0); 

BTW。 gridPane適合簡單的跳棋遊戲嗎? 謝謝

+1

創建一個演示問題的[MCVE],並且[編輯]您的問題以包含它。您發佈的代碼與您所描述的任何問題都沒有對應(一方面,您只有一個節點添加到網格窗格中)。 –

回答

0

所以,你已經設置了每個行和列的填充,這意味着網格中每個元素的所有邊上會有10px的空間。然後你在第10列中添加了一些東西。這將創建所有0-9列,寬度和高度爲0,因爲它們沒有內容。但是,由於它們的填充,它們每個佔用大約20x20像素的正方形。當你將這些空間添加到這些空間中時,他們當然會移動你的對象,因爲它們現在佔用了空間。

而不是使用填充來創建您的列和行的寬度和高度,請考慮ColumnConstraintsRowConstraints。我在下面添加了它們的使用文檔。

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))。

混合尺寸類型

的申請,可自由地混合的大小類型的行/列的(從內容計算的,固定的或百分比)。首先基於它們的可用空間百分比(大小減去插入和間隔),百分比行/列將被首先分配空間。剩下的空間將被分配給給定最小尺寸,首選尺寸和最大尺寸的行/列,並增加優先級。