JavaFX-如何知道GridPane中按钮的位置?

时间:2019-05-15 02:49:28

标签: javafx scenebuilder

我有一个包含GridPane的fxml文件,我想在GridPane的每个正方形中找到按钮。然后,我想在单击的按钮上显示图像。但是,单击按钮并调用控制器中的方法时,似乎没有有关单击按钮位置的信息。没有这个,我不知道显示图像的正方形。我该如何解决这个问题?

我正在使用JavaFX ScneBuilder2.0。 我已经尝试了很多方法,这些方法的数量与GridPane中的平方数相对应。显然,这导致产生的源文件太长,我放弃了。

这是控制器类的一部分。

//GomokuController.java
package client;

import javafx.fxml.FXML;
import javafx.scene.control.Button;
import javafx.scene.layout.GridPane;

public class GomokuController implements Initializable{
    @FXML private GridPane gomokuBoard;
    @FXML private Button[][] put_stone_button = new Button[15][15];

    @FXML public void put_stone(){
      //called by pushing a button in the GridPane
      //I wanna know in which square the pushed button locates.
    }
}

1 个答案:

答案 0 :(得分:2)

您应该只能够调用GridPane.getRowIndex()GridPane.getColumnIndex()方法并传递被单击的Button

但是,您将需要以某种方式将Button传递给您的put_stone()方法。在下面的示例中,单击按钮时,我将对您的Button的引用传递给该方法:

put_stone_button[0].setOnAction(event -> put_stone(put_stone_button[0])

public void put_stone(Button button){
  int row = GridPane.getRowIndex(button);
  int column = GridPane.getColumnIndex(button);
}

由于您发布的代码中的实现方式不清楚,因此您可能需要将此解决方案适应您的项目。

  

旁注::请学习Java naming conventions并坚持使用。