java - 单击时Java-FX接收Shape-Array的索引
问题描述
我正在尝试构建一个战舰应用程序。到目前为止,我设法为玩家和敌人显示了两个字段。一个字段由 10 x 10 矩形组成 - 一个 VBox 中的 10 个 HBox。这是为我创建一个字段的方法:
private Rectangle[][] field;
public VBox CreateField(){
VBox vbox = new VBox(2);
for(int i = 0; i < this.columns; ++i){
HBox hbox = new HBox(2);
for(int j = 0; j < this.rows; ++j){
this.array[j][i] = 0;
this.field[i][j] = new Rectangle(this.height*j, this.width*i, this.height, this.width);
this.field[i][j].setStroke(Color.BLACK);
this.field[i][j].setFill(Color.LIGHTGRAY);
hbox.getChildren().add(this.field[i][j]);
}
vbox.getChildren().add(hbox);
}
return vbox;
}
这是结果:
当用户单击其中一个时,我需要接收 Rectangle 的索引。
你们能给我一个例子/代码片段如何解决我的问题吗?
解决方案
大声笑,比我想象的要快。这是我的解决方案(如何获取为我的程序单击的每个按钮的索引?)
private EventHandler<? super MouseEvent> 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));
}
public VBox CreateField(){
VBox vbox = new VBox(2);
for(int i = 0; i < this.columns; ++i){
HBox hbox = new HBox(2);
for(int j = 0; j < this.rows; ++j){
this.array[j][i] = 0;
this.field[i][j] = new Rectangle(this.height*j, this.width*i, this.height, this.width);
this.field[i][j].setStroke(Color.BLACK);
this.field[i][j].setFill(Color.LIGHTGRAY);
this.field[i][j].setOnMouseClicked(createTileHandler(i,j));
hbox.getChildren().add(this.field[i][j]);
}
vbox.getChildren().add(hbox);
}
return vbox;
}
这将返回:
Clicked tile at (3,2)
Clicked tile at (3,2)
Clicked tile at (4,4)
Clicked tile at (3,0)
Clicked tile at (8,8)
Clicked tile at (9,9)
Clicked tile at (0,0)
Clicked tile at (0,1)
Clicked tile at (0,2)
当我单击一个形状时。为这个问题道歉..
推荐阅读
- ansible - 如何使ansible考虑将某些主机配置为可选?
- android - android中的Firebase推送通知无法正常工作
- angular - 单击事件未从组件内触发
- vba - 在启动之间保留 VBA/Excel 中的库引用
- assembly - ARM 汇编语言的概念问题
- javascript - JS 混合应用程序 - 在 localStorage 中存储令牌
- reactjs - 数组元素上的onClick事件javascript React
- java - 将 csv 文件作为附件插入 pdf 文件 JAVA
- angular - 无法将 ngx-cookie-service 与 angular 5 一起使用
- dart - 如何使用颤动在按钮网格中滑动/拖动 2 个或更多按钮