长话短说,我有8x8 GridPane(用它作为国际象棋棋盘),我希望能够点击每个单元格并获得它的坐标。
public class BoardView {
private ImageView imageView = new ImageView(new Image("board.png"));
private GridPane boardGrid = new GridPane();
public void createBoard(){
boardGrid.getChildren().add(imageView);
for(int i =0;i < 8; i++){
for(int j = 0; j < 8; j++){
Tile tile = new Tile(i, j);
GridPane.setConstraints(tile.getPane(), i, j);
boardGrid.getChildren().add(tile.getPane());
}
}
}
class Tile {
private int positionX;
private int positionY;
private Pane pane;
Tile(int x, int y) {
pane = new Pane();
positionX = x;
positionY = y;
pane.setOnMouseClicked(e -> {
System.out.println(positionX + " " + positionY);
}
);
}
}
但是,在我点击的任何地方,结果都是“0 0”,而不是实际的行/列位置。
答案 0 :(得分:1)
你的代码不完整,你的一些错误是:
您尚未在每个窗格(瓷砖)上给出特定尺寸(宽度,高度)
我猜你在某处设置了GridPane的大小,但它只是一个猜测,现在你在网格上添加背景图像的方式是我不建议使用StackPane。< / p>
这是一个小例子,您可以检查以调试您的问题。
Item::Item()
从我的角度来看,如果你让类扩展Pane而不仅仅是对它进行引用,那么你更容易处理每个Tile,但这只是我的观点。以上就是它的一个例子。如果你找不到问题然后发布MCVE节目,我们可以帮助你更好。