You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决JavaFX中GridPane无法适配底层单元格的问题

GridPane与ImageView尺寸不匹配及棋子突破单元格边界问题

我有一个尺寸为1000×750的GridPane(playingFieldGrdPn)和ImageView,二者均被放置在gameGrdPn的坐标(0,1)处,本应完全重叠,但GridPane比ImageView更宽。测试发现将场景宽度设为1000时,窗口会在ImageView末端被完美截断,说明GridPane宽度莫名超过1000。

控制器代码

gameGrdPn.getColumnConstraints().get(0).setMinWidth(1000);
gameGrdPn.getColumnConstraints().get(0).setPrefWidth(1000);
gameGrdPn.getColumnConstraints().get(0).setMaxWidth(1000);
gameGrdPn.getRowConstraints().get(1).setMinHeight(750);
gameGrdPn.getRowConstraints().get(1).setPrefHeight(750);
gameGrdPn.getRowConstraints().get(1).setMaxHeight(750);

playingFieldGrdPn.getColumnConstraints().removeAll(playingFieldGrdPn.getColumnConstraints());
playingFieldGrdPn.getRowConstraints().removeAll(playingFieldGrdPn.getRowConstraints());

playingFieldGrdPn.setMinSize(1000, 750);
playingFieldGrdPn.setMaxSize(1000, 750);
playingFieldGrdPn.setGridLinesVisible(true);
playingFieldGrdPn.setPadding(new Insets(0));
playingFieldGrdPn.prefWidthProperty().bind(gameGrdPn.getColumnConstraints().get(0).prefWidthProperty());

for (int x = 0; x < 1000; x++) {
    ColumnConstraints col = new ColumnConstraints(1);
    col.setHgrow(Priority.NEVER);
    playingFieldGrdPn.getColumnConstraints().add(col);
}

for (int y = 0; y < 750; y++) {
    RowConstraints row = new RowConstraints(1);
    row.setVgrow(Priority.NEVER);
    playingFieldGrdPn.getRowConstraints().add(row);
}

Image playingBoardImg = new Image(getClass().getResourceAsStream("HaseUndIgelPlayingBoard.png"));
ImageView playingBoardView = new ImageView(playingBoardImg);
gameGrdPn.add(playingBoardView, 0, 1, 1000, 750);
gameGrdPn.getChildren().get(4).toBack(); //sending imageView to back

问题截图

问题截图

我尝试调整底层面板的尺寸,结果只是GridPane被截断。本人刚接触JavaFX,恳请帮助!


补充问题

我发现放置游戏棋子(gamingPiece)会撑开列宽,现在想知道如何让图片突破所在GridPane单元格的边界?

棋子相关代码

for(int i = 0; i < 6; i++){
    Image gamingPieceImg = new Image(getClass().getResourceAsStream("gamingPieces/gamingPiece-"+i+".png"));
    ImageView gamingPieceView = new ImageView(gamingPieceImg);
    gamingPieceView.setFitHeight(60);
    gamingPieceView.setFitWidth(60);

    GridPane.setColumnSpan(gamingPieceView, 1);
    GridPane.setRowSpan(gamingPieceView, 1);

    playingFieldGrdPn.add(gamingPieceView, 1000, 350);
}

内容的提问来源于stack exchange,提问作者Animor Romina

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 06:46:00