如何解决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
相关产品推荐
相关产品推荐

