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
Code:
The listener classpanelGrid.setLayout(new GridLayout(0, 9)); JButton b00 = new JButton(" "); ActionListener ac = new Counter(b00); b00.addActionListener(new Counter(b00)); panelGrid.add(b00);
Code:
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) { count++; if (count > 5) { count = 0; } button.setText(""+count); Futoshiki f = new Futoshiki(); Futoshiki.setSquare(row, col, count); System.out.println("CLICKED "+count+" TIMES"); } }
The setSquare method
Code:
Thank you in advance for your time.public static void setSquare(int row, int column, int val) { squares[row][column] = new FilledSquare(val); }