JavaFX - GridPane 行在将图片插入按钮后增加高度
JavaFX - GridPane row increases in height after inserting a picture into a button
我有一个按钮网格。当我点击一个按钮时,一个 ImageView 被插入其中并且由于某种原因单元格高度增加。我不明白为什么以及如何解决它。如何使单元格大小不变?
点击按钮后第一行高度增加。
我的控制器class:
public class Controller {
public GridPane gameTable;
public Label score1;
public Label score2;
Image openImage = new Image(getClass().getResourceAsStream("/open.jpg"));
MyButton open1;
MyButton open2;
Player player1 = new Player();
Player player2 = new Player();
Player currentPlayer = player1;
public void initialize(){
System.out.println(gameTable.getRowCount()+" "+gameTable.getColumnCount());
for (int i = 0; i < 6; i++) {
for (int j = 0; j < 5; j++) {
MyButton btn = new MyButton(i);
btn.setMaxWidth(Double.MAX_VALUE);
btn.setMaxHeight(100);
gameTable.add(btn, i, j);
btn.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent actionEvent) {
ImageView iv = new ImageView(openImage);
iv.setPreserveRatio(true);
iv.setFitWidth(btn.getWidth()-10);
btn.setGraphic(iv);
}
});
}
}
}
}
GridPane
的默认行为是尝试将所有单元格的大小调整为其内容的首选大小。 (如果有额外的 space 可用,它会尝试均匀分配,或者根据节点上设置的约束或行或列约束。)将图像添加到按钮时,会增加按钮的首选高度,因此您增加了分配给包含该按钮的单元格的 space。
您可以通过在 GridPane
上设置 RowConstraints
(更改垂直 space 分配给每一行的方式)和 ColumnConstraints
(控制水平 space 分配给每一列)。
如果要完全约束每行的高度,设置所有行的min
、pref
和maxHeight
:
for (int j = 0 ; j < 5 ; j++) {
RowConstraints rc = new RowConstraints();
rc.setMinHeight(100);
rc.setPrefHeight(100);
rc.setMaxHeight(100);
gameTable.getRowConstraints().add(rc);
}
如果要按比例设置高度,请使用 setPercentHeight()
:
for (int j = 0 ; j < 5 ; j++) {
RowConstraints rc = new RowConstraints();
rc.setPercentHeight(100.0 / 5);
gameTable.getRowConstraints().add(rc);
}
我有一个按钮网格。当我点击一个按钮时,一个 ImageView 被插入其中并且由于某种原因单元格高度增加。我不明白为什么以及如何解决它。如何使单元格大小不变?
点击按钮后第一行高度增加。
我的控制器class:
public class Controller {
public GridPane gameTable;
public Label score1;
public Label score2;
Image openImage = new Image(getClass().getResourceAsStream("/open.jpg"));
MyButton open1;
MyButton open2;
Player player1 = new Player();
Player player2 = new Player();
Player currentPlayer = player1;
public void initialize(){
System.out.println(gameTable.getRowCount()+" "+gameTable.getColumnCount());
for (int i = 0; i < 6; i++) {
for (int j = 0; j < 5; j++) {
MyButton btn = new MyButton(i);
btn.setMaxWidth(Double.MAX_VALUE);
btn.setMaxHeight(100);
gameTable.add(btn, i, j);
btn.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent actionEvent) {
ImageView iv = new ImageView(openImage);
iv.setPreserveRatio(true);
iv.setFitWidth(btn.getWidth()-10);
btn.setGraphic(iv);
}
});
}
}
}
}
GridPane
的默认行为是尝试将所有单元格的大小调整为其内容的首选大小。 (如果有额外的 space 可用,它会尝试均匀分配,或者根据节点上设置的约束或行或列约束。)将图像添加到按钮时,会增加按钮的首选高度,因此您增加了分配给包含该按钮的单元格的 space。
您可以通过在 GridPane
上设置 RowConstraints
(更改垂直 space 分配给每一行的方式)和 ColumnConstraints
(控制水平 space 分配给每一列)。
如果要完全约束每行的高度,设置所有行的min
、pref
和maxHeight
:
for (int j = 0 ; j < 5 ; j++) {
RowConstraints rc = new RowConstraints();
rc.setMinHeight(100);
rc.setPrefHeight(100);
rc.setMaxHeight(100);
gameTable.getRowConstraints().add(rc);
}
如果要按比例设置高度,请使用 setPercentHeight()
:
for (int j = 0 ; j < 5 ; j++) {
RowConstraints rc = new RowConstraints();
rc.setPercentHeight(100.0 / 5);
gameTable.getRowConstraints().add(rc);
}