【问题标题】:JavaFX - GridPane row increases in height after inserting a picture into a buttonJavaFX - 将图片插入按钮后,GridPane 行的高度增加
【发布时间】:2020-08-20 19:09:16
【问题描述】:

我有一个按钮网格。当我单击一个按钮时,一个 ImageView 被插入其中,并且由于某种原因,单元格高度增加了。我不明白为什么以及如何解决它。如何使单元格大小保持不变?

按钮点击后第一行高度增加。

我的控制器类:

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


                    }
                });

            }
        }
    }
}

【问题讨论】:

    标签: button javafx imageview gridpane


    【解决方案1】:

    GridPane 的默认行为是尝试将所有单元格调整为其内容的首选大小。 (如果有额外的可用空间,它会尝试平均分配它,或者根据节点上设置的约束或行或列约束。)当您将图像添加到按钮时,您会增加按钮的首选高度,因此您增加分配给包含该按钮的单元格的空间。

    您可以通过在GridPane(更改垂直空间分配给每行的方式)和ColumnConstraints(控制分配给每列的水平空间)上设置RowConstraints 来更改默认行为。

    如果要完全限制每行的高度,请设置所有行的minprefmaxHeight

    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);
    }
    

    【讨论】:

    • 这似乎不是问题的唯一部分。对于列,这似乎已经完成,但是包含图像的Button 似乎大于单元格边界(如按钮 (1,0) 部分后面的焦点颜色以及没有四舍五入的事实所示按钮右侧的边框)。有必要使用按钮图形的插图。另外选择足够大的图像,布局将再次被破坏(;尝试使用 2 张壁纸大小的图像)。
    猜你喜欢
    • 2016-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-13
    • 2016-10-17
    • 1970-01-01
    相关资源
    最近更新 更多