I am using gridlayout to display a 9x9 grid of jbuttons and jlabels, representing a futoshiki puzzle (thanks Fubarable). When you click a button it changes values from 0 to 5. I have another class (Futoshiki) that holds all the data of the puzzle and the GUI class is responsible only for displaying that data. Upon clicking a button at a specific row and column i want to set the value of the same cell in the Futoshiki class to the whatever text is in the button. I know i can do this by writing a separate listener class for each button and set the row and the column manually(as in the code below) but i was wondering if there is a more efficient way of doing this. Is it possible to get the row and the column of a specific component(button) and return it as an int value that can be passed on to another method?
Here is my code:
the button
panelGrid.setLayout(new GridLayout(0, 9));
        JButton b00 = new JButton("  ");
        ActionListener ac = new Counter(b00);
        b00.addActionListener(new Counter(b00));
The listener class
public class Counter implements ActionListener
        private int count;
        private JButton button;
        private int row;
        private int col;
        public Counter(JButton b)
            button = b;
           // here i am doing this manually 
            row = 0;
            col = 0;
        public void actionPerformed(ActionEvent e)
            if (count > 5) {
                count = 0;
            Futoshiki f = new Futoshiki();
            Futoshiki.setSquare(row, col, count);
            System.out.println("CLICKED "+count+" TIMES");

The setSquare method
 public static void setSquare(int row, int column, int val)
        squares[row][column] = new FilledSquare(val);      
Thank you in advance for your time.