我是初学者java开发人员,我必须在java fx中创建简单的游戏。 我想学习这个,而不是使用模板或游戏另一个autors。 我有GridPane的问题。所以我的应用程序前有8个元素。文字,标签和图像,但我的问题是在舞台上安排元素。例如,如果我尝试定位一个元素,其他元素丢失位置。我做错了什么?
代码:
grid.setHgap(20);
grid.setVgap(20);
grid.setPadding(new Insets(10, 10, 10 ,10));
grid.add(welcome, 10, 0);
顺便说一句。 gridPane适合简单的跳棋游戏吗? 感谢
答案 0 :(得分:0)
因此,您已经在每个列和行上设置了填充,这意味着网格中每个元素的所有边都将有10px的空间。然后你在第10栏中添加了一些东西。这将创建所有列0-9,宽度和高度为0,因为它们没有内容。然而,由于它们的填充,它们每个占据大约20x20像素的正方形。当您在这些空间中添加内容时,他们当然会移动您的welcome
对象,因为它们现在占用了空间。
不要使用填充来创建列和行的宽度和高度,而应考虑ColumnConstraints
和RowConstraints
。我在下面添加了他们使用的文档。
行/列大小调整
默认情况下,行和列的大小将适合其内容;一列足够宽以容纳最宽的子节点,一行高到足以容纳最高的子节点。但是,如果应用程序需要显式控制行或列的大小,它可以通过添加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))。
混合尺寸类型
应用程序可以自由混合行/列的大小类型(根据内容,固定或百分比计算)。行/列的百分比将始终首先根据网格面板可用空间的百分比(大小减去插入和间隙)分配空间。给定最小,首选和最大尺寸并增加优先级,剩余空间将分配给行/列。