您可以使用参数、实用函数和 lambda 表达式动态创建图块处理程序:
private EventHandler<ActionEvent> createTileHandler(int x, int y) {
return event -> tileHandler(x, y);
}
private void tileHandler (int x, int y){
System.out.println(String.format("Clicked tile at (%d,%d)", x, y));
}
然后应用到不同的按钮,如下所示:
...
for (int i=0; i<8; i++){
for (int j=0; j<8; j++) {
tiles[i][j].setOnAction(createTileHandler(i, j));
}
}
...
或者,修改当前的解决方案,您可以添加两个成员Tile_Handler
,因此在创建它时将其附加到特定坐标:
class Tile_Handler implements EventHandler<ActionEvent> {
private int x, y;
public Tile_Handler(int x, int y) {
this.x = x;
this.y = y;
}
public void handle(ActionEvent e){
System.out.println(String.format("yo clicked one button located at %d,%d",x,y));
}
}
然后将实例化更改为
Tile_Handler tile_handle = new Tile_Handler(i, j);