1
Good afternoon community,
Lately I’ve been exploring the javafx aspect and creating an application for my master’s degree. Briefly, the application receives an image from the user, and creates a gridpane above the image, depending on the number of columns and rows the user wants. Each gridpane cell has a label value of 0.
The image is an example of the explanation: 
So far so good. What I want and am not succeeding, is to add an Event mouse, that whenever I click on a gridpane label/cell, the value 0 passes to 1.
package vistas;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.util.ResourceBundle;
import javax.print.DocFlavor.URL;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.AnchorPane;
import javafx.scene.layout.ColumnConstraints;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.RowConstraints;
import javafx.stage.FileChooser;
import principal.main;
public class AreaProjectoController {
    @FXML
    private Button meuBotaoImagem, meuBotaoGrelha, btnLimpaGrelha;
    @FXML
    private ImageView minhaImagem;
    @FXML
    private TextField txtGrelhaLeft, txtGrelhaRight;
    @FXML
    private AnchorPane painelGrelha, painelArea;
    @FXML
    private GridPane painelCriaGrelha;
    public void initialize(URL location, ResourceBundle resources) {}
    public void mostraImagem(ActionEvent evento) throws FileNotFoundException {
        FileChooser imagemEscolhida = new FileChooser();
        // Define a extensão do ficheiro
        FileChooser.ExtensionFilter extFilter = new FileChooser.ExtensionFilter("JPEG/PNG", "*.jpeg", "*.png");
        imagemEscolhida.getExtensionFilters().add(extFilter);
        // abre a janela para procurar uma imagem
        File ficheiro = imagemEscolhida.showOpenDialog(main.getPrimaryStage());
        // O if trata quando se cancela o carregamento de uma imagem
        if(ficheiro != null) {
            Image imagem = new Image(new FileInputStream(ficheiro));
            minhaImagem.setImage(imagem);
            painelGrelha.setVisible(true);
            txtGrelhaLeft.setText("0");
            txtGrelhaRight.setText("0");
        } 
    }
    public void criaGrelha(ActionEvent evento) {
        int txtLeft = 0, txtRight = 0, i = 1, ii = 1;
        ColumnConstraints colunas = null; 
        RowConstraints linhas = null;
        txtLeft = Integer.parseInt(txtGrelhaLeft.getText());
        txtRight = Integer.parseInt(txtGrelhaRight.getText());
        //Este for cria a grelha após receber os valores
        for(i = 1; i <= txtLeft; i++) {
            colunas = new ColumnConstraints();
            colunas.setPercentWidth(25);
            painelCriaGrelha.getColumnConstraints().add(colunas);
        }
        for(ii = 1; ii <= txtRight; ii++) {
            linhas = new RowConstraints();
            linhas.setPercentHeight(25);
            painelCriaGrelha.getRowConstraints().add(linhas);
        }
        Label fillLabel[][] = new Label[txtLeft][txtRight];
        for (int l = 0; l < fillLabel.length; l++) {
            for (int j = 0; j < fillLabel[l].length; j++) {
                fillLabel[l][j] = new Label();
                fillLabel[l][j].setText("0");
                painelCriaGrelha.add(fillLabel[l][j], l, j);
            }
        }
        painelCriaGrelha.setGridLinesVisible(true); //isto faz aparecer as linhas da grelha a preto
        painelArea.setVisible(true);
        System.out.println(fillLabel[2][2]);
    }
    public void limpaGrelha(ActionEvent evento) {
        painelCriaGrelha.getColumnConstraints().clear();
        painelCriaGrelha.getRowConstraints().clear();
        txtGrelhaLeft.setText("0");
        txtGrelhaRight.setText("0");
    }
}
This is the code that has the features that we see in the image. It’s the view controller class. Because my goal is to select the cells/cells that correspond to the blue area of the image. Note that the values go to a matrix. In this example the matrix is:
0000000000
0000000000
0000000000
0000000000
0000000000
0000000000
0000000000
0000000000
0000000000
0000000000
But it should be, after implementing the mouse click event, something like this:
0000111111
1111111111
1111111111
1111100011
1111100011
0000000000
0000000000
0000000000
0000000000
0000000000
Thank you.

